在惰性语句中使用 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);
这样可以更轻松地查看(和修复)查询的结构。
我想将一个字符串常量连同 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);
这样可以更轻松地查看(和修复)查询的结构。