在惰性语句中使用 Select 将字符串常量插入 table

Insert a String Constant into a table using Select inside Inert Statement

我想将一个字符串常量连同 select 语句的结果一起插入到 table 中。

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 认为它是来自 table 抱怨的列名。但是我可以插入整数值,例如 1,2... 等等。

你想要的终极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);

这样可以更轻松地查看(和修复)查询的结构。