我有以下存储过程:
CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
SELECT * FROM tb WHERE Indx = id;
END//
当我打电话给get(用户,1)时,我得到以下内容:
ERROR 1054 (42S22): Unknown column 'user' in 'field list'
答案 0 :(得分:2)
您不能在SQL中将变量用作表名,因为它会在编译过程时编译该变量。尝试使用预准备语句:
CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
PREPARE stmt1 FROM CONCAT('SELECT * FROM ', tb, ' WHERE Indx = id');
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END//
但请注意,这会慢一些。
答案 1 :(得分:0)
你能称之为get('user',1)
吗?
IN tb VARCHAR(50)
使它期望一个'字符串',你传递的东西是SQL解析器解释为字段user
而且不知道。