我想进行查询,以动态限制从另一个表中插入数据,该数据会在运行时生成
这是过程的一部分,其中我在会话的临时表中插入数据,以便我可以处理其他查询,我已经通过repeat语句完成了该操作,但是所需的时间比我希望的长,但MySQL确实需要不允许限制变量。
我在这里将int用于演示目的。
**SET @counter = 10; #FOUND_ROWS();
SET @bill_id = 1; #last_insert_id();
INSERT INTO billingids (bill_id) (
SELECT id from cfx_billing WHERE id >= @bill_id LIMIT @counter
);**
但是它不起作用然后我尝试了准备语句
**SET @counter = 10; #FOUND_ROWS();
SET @bill_id = 1; #last_insert_id();
PREPARE STMT FROM "SELECT id from cfx_billing WHERE id >= @bill_id LIMIT ?";
INSERT INTO billingids (bill_id) (
EXECUTE STMT USING @counter
);
DEALLOCATE PREPARE stmt;**
对于1条语句,我遇到此错误
SQL错误(1064):您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取在'@counter附近使用的正确语法 )”在第1行。
对于2条陈述
SQL错误(1064):您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在'EXECUTE STMT USING @counter附近使用 )”在第二行
答案 0 :(得分:1)
您不能在子查询中使用EXECUTE STMT
。它必须是整个查询。
PREPARE STMT FROM "INSERT INTO billingids (bill_id)
SELECT id from cfx_billing WHERE id >= @bill_id LIMIT ?";
EXECUTE STMT USING @counter;
我还没有测试过这个示例,但是我知道您需要准备整个语句,而不仅仅是子查询。