一尘不染

MySQL存储过程动态更改表名

sql

我想在sql查询中更改表的动态名称。例如,我有下一个存储过程:

CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text)
BEGIN
    INSERT INTO tableName VALUES (message);
END;

我需要在运行时更改 tableName ,我可以这样做吗?谢谢。


阅读 408

收藏
2021-03-08

共1个答案

一尘不染

您必须使用动态SQL来准备执行SQL字符串,以实现您所描述的内容。

在准备之前,必须将动态表名称(或列名称或SQL关键字等)内插到SQL字符串中。您不能将查询参数用于这些动态元素。

当您将表名称插入到SQL查询中时,请小心避免SQL注入漏洞。例如,您应该通过在信息模式中查找表名来检查表名是否存在。

我同意@OMG Ponies的评论-
这是一种代码味道,您具有结构相同的多个表,因此您希望对完全相同的列进行完全相同的插入。代码气味并不能保证您的设计不好,但是值得考虑。

2021-03-08