我正在尝试将表名传递到我的mysql存储过程中,以使用此sproc从其他表中进行选择,但是它不起作用…
这是我正在尝试的:
CREATE PROCEDURE `usp_SelectFromTables`( IN TableName varchar(100) ) BEGIN SELECT * FROM @TableName; END
我也尝试过不带@符号,它只是告诉我TableName不存在…我知道:)
它取决于DBMS,但是这种表示法通常需要Dynamic SQL,并且会遇到一个问题,即函数执行时的返回值取决于输入。这给系统带来了麻烦。作为一般规则(因此可能会有例外),DBMS不允许您将占位符(参数)用于查询的结构元素,例如表名或列名。它们仅允许您指定诸如列值之类的值。
某些DBMS确实具有存储过程支持,这将使您可以构建SQL字符串,然后使用“准备”或“立即执行”或类似操作对其进行处理。但是请注意,您突然容易受到SQL注入攻击的攻击- 可以执行您的过程的人可以部分控制执行SQL的方式。