一尘不染

在mysql sproc中使用变量作为表名

mysql

我正在尝试将表名传递到我的mysql存储过程中,以使用此sproc从其他表中进行选择,但是它不起作用…

这是我正在尝试的:

CREATE PROCEDURE `usp_SelectFromTables`(
 IN TableName varchar(100)
)
BEGIN
        SELECT * FROM @TableName;
END

我也尝试过不带@符号,它只是告诉我TableName不存在…我知道:)


阅读 349

收藏
2020-05-17

共1个答案

一尘不染

它取决于DBMS,但是这种表示法通常需要Dynamic
SQL,并且会遇到一个问题,即函数执行时的返回值取决于输入。这给系统带来了麻烦。作为一般规则(因此可能会有例外),DBMS不允许您将占位符(参数)用于查询的结构元素,例如表名或列名。它们仅允许您指定诸如列值之类的值。

某些DBMS确实具有存储过程支持,这将使您可以构建SQL字符串,然后使用“准备”或“立即执行”或类似操作对其进行处理。但是请注意,您突然容易受到SQL注入攻击的攻击-
可以执行您的过程的人可以部分控制执行SQL的方式。

2020-05-17