使用Select Inert Statement将String Constant插入表中

时间:2015-03-25 02:13:18

标签: mysql sql prepared-statement procedure

我想将一个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 ......等等。

1 个答案:

答案 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);

这样可以更容易地查看(并修复)查询结构。