我想将一个String常量与select语句的结果一起插入表中。
Create table SignatureCount(tableName VARCHAR(100), signatures VARCHAR(20));
...
SET @s = CONCAT('INSERT INTO SignatureCount (tableName, signatures) Select count(distinct signature),', tableName ,' from ', tableName);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
此处 tableName 是一个变量。
问题是SQL认为它的表名是一个抱怨的表名。但是我可以插入整数值,如1,2 ......等等。
答案 0 :(得分:1)
您想要的终极SQL就像
INSERT INTO SignatureCount(tableName, signatures)
Select 'tablename', count(distinct signature),'
from tableName;
我认为这会产生它:
SET @s = CONCAT('INSERT INTO SignatureCount(tableName, signatures) ',
'Select ''', tablename, ''', count(distinct signature) ',
'from ', tableName);
在这样的表达式中,你需要非常小心逗号和单引号。
实际上,我经常使用替换来解决这个问题:
SET @s = REPLACE('INSERT INTO SignatureCount(tableName, signatures)
SELECT ''@tablename'', count(distinct signature) from @tablename',
'@tablename', tableName);
这样可以更容易地查看(并修复)查询结构。