0

我有闲置的存储过程:

CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
    SELECT * FROM tb  WHERE Indx = id;
END//

当我调用 get(user,1) 时,我得到以下信息:

ERROR 1054 (42S22): Unknown column 'user' in 'field list'
4

2 回答 2

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//

但是请注意,这会变慢。

于 2010-04-04T18:09:56.873 回答
0

你能称之为get('user',1)吗?

IN tb VARCHAR(50)让它期待一个“字符串”,你传递了一些 SQL 解析器解释为字段的东西user,这是不知道的。

于 2010-04-04T18:00:54.237 回答