开发者社区 问答 正文

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

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

这是我正在尝试的:

CREATE PROCEDURE usp_SelectFromTables( IN TableName varchar(100) ) BEGIN SELECT * FROM @TableName; END 我也尝试过不带@符号,它只是告诉我TableName不存在...我知道:)

展开
收起
保持可爱mmm 2020-05-17 12:08:27 591 分享 版权
1 条回答
写回答
取消 提交回答
  • 它取决于DBMS,但是这种表示法通常需要Dynamic SQL,并且会遇到一个问题,即函数执行时的返回值取决于输入。这给系统带来了麻烦。作为一般规则(因此可能会有例外),DBMS不允许您将占位符(参数)用于查询的结构元素,例如表名或列名。它们仅允许您指定诸如列值之类的值。

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

    2020-05-17 12:08:43
    赞同 展开评论