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

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

这是我正在尝试的:

CREATE PROCEDURE `usp_SelectFromTables`(

IN TableName varchar(100)

)

BEGIN

SELECT * FROM @TableName;

END

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

回答:

它取决于DBMS,但是这种表示法通常需要Dynamic

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

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

可以执行您的过程的人可以部分控制执行SQL的方式。

以上是 在mysql sproc中使用变量作为表名 的全部内容, 来源链接: utcz.com/qa/400820.html

回到顶部