为什么这工作完美:MySQL的语法问题
SET @columnQuery = 'INSERT INTO ColumnNames SELECT ORDINAL_POSITION, COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME=''residents'' ORDER BY ORDINAL_POSITION;';
PREPARE STMT FROM @columnQuery;
EXECUTE STMT;
但这并不:
DECLARE TableName VARCHAR(50);
SET @TableName = 'residents';
SET @columnQuery = 'INSERT INTO ColumnNames SELECT ORDINAL_POSITION, COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME=''' + @TableName + ''' ORDER BY ORDINAL_POSITION;';
PREPARE STMT FROM @columnQuery;
EXECUTE STMT;
,并没有做到这一点:
DECLARE TableName VARCHAR(50);
SET @TableName = 'residents';
SET @columnQuery = CONCAT('INSERT INTO ColumnNames SELECT ORDINAL_POSITION, COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME=''', @TableName, ''' ORDER BY ORDINAL_POSITION;');
PREPARE STMT FROM @columnQuery;
EXECUTE STMT;
无论是做这个的:
SET @columnQuery = 'INSERT INTO ColumnNames SELECT ORDINAL_POSITION, COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME=? ORDER BY ORDINAL_POSITION;';
PREPARE STMT FROM @columnQuery;
EXECUTE STMT USING @TableName;
这是给我的问题存储过程的一部分:
CREATE PROCEDURE sp_ReturnSingleRowAsXml
(
IN TableName VARCHAR(50)
)
BEGIN
DECLARE columnQuery VARCHAR(1000);
DROP TABLE IF EXISTS ColumnNames;
CREATE TEMPORARY TABLE ColumnNames (
ID INT, ColumnName VARCHAR(50)
);
SET @columnQuery = 'INSERT INTO ColumnNames SELECT ORDINAL_POSITION, COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME=''' + @TableName + ''' ORDER BY ORDINAL_POSITION;';
PREPARE STMT FROM @columnQuery;
EXECUTE STMT;
select * from ColumnNames;
END;
CALL sp_ReturnSingleRowAsXml('residents');
的select返回没事的时候,它应该返回40行。但是,如果我在@columnQuery中硬编码“居民”这个词,我会得到结果!是的,肯定有一张名为“居民”的表。
有时候,我得到这个错误,有时我不知道,这取决于我是否使用CONCAT或只是手动连接字符串:
MySQL数据库错误:你在你的SQL语法错误;检查对应于你的MySQL服务器版本在1号线
太棒了!奇迹般有效。那么交易是什么?输入参数不能直接用于语句中?我必须先将它们放入局部变量中?奇怪的。 – Blackcoil 2010-10-19 18:00:42