mysql - 通用 Mysql 存储过程

标签 mysql sql mysql-error-1054

我有以下存储过程:

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'

最佳答案

您不能在 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//

但请注意,这会变慢。

关于mysql - 通用 Mysql 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575348/

相关文章:

sql - 删除给定日期内的重复行组合

mysql - 错误代码 : 1054. '’ 中的未知列 'where clause' '

mysql - SQL:FROM 子句中有两次表

php - 仅当该值不同于空值时才更新列上的值

php - 带有父代码的多列引用

python:操作错误:接近 "%":语法错误

mysql - 在动态 View 中使用准备好的语句

python - 循环将数据从串口读取到数据库

mysql - 如何根据特定年份显示年龄?

php - Drupal SQL表如何在每一行上插入编辑按钮