MySQL 存储过程 - 如何在 FROM 子句中使用参数

标签 mysql sql stored-procedures

我有以下存储过程:

DELIMITER ///

CREATE PROCEDURE tmp_test_proc(__TABLE__NAME varchar(255))
BEGIN
  SELECT COUNT(*) FROM __TABLE__NAME;
END///

DELIMITER ;

我想从参数__TABLE__NAME中进行选择,但是MySQL告诉我没有表__TABLE__NAME...那么有没有办法使用该值from 子句中的参数?

最佳答案

默认情况下,您无法参数化表名称(以及列名称),您需要为此创建 PreparedStatement

DELIMITER ///

CREATE PROCEDURE tmp_test_proc(__TABLE__NAME varchar(255))
BEGIN
    SET @sql = CONCAT('SELECT COUNT(*) FROM ', __TABLE__NAME);

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END///

DELIMITER ;

关于MySQL 存储过程 - 如何在 FROM 子句中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626569/

相关文章:

php - Mysql查询和php一一列出多个值

sql - Postgres : row with comma separated value to array of json objects

mysql - 函数 json_object 不存在

sql - 存储过程太慢

mysql - 存储过程中的临时表返回的值与常规查询中的值不同

c# - 使用 LINQ 访问存储过程值。 Entity Framework 5,数据库优先

MySQL:使用自动提交锁定表与启动事务

python - 覆盖 Flask-Sqlalchemy 中的表名称

mySQL 查询;忽略特定的 ID 值

php - 如何防止 PHP 中的 SQL 注入(inject)?