我想在sql查询中更改表的动态名称。例如,我有下一个存储过程:
CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text) BEGIN INSERT INTO tableName VALUES (message); END;
我需要在运行时更改 tableName ,我可以这样做吗?谢谢。
您必须使用动态SQL来准备和执行SQL字符串,以实现您所描述的内容。
在准备之前,必须将动态表名称(或列名称或SQL关键字等)内插到SQL字符串中。您不能将查询参数用于这些动态元素。
当您将表名称插入到SQL查询中时,请小心避免SQL注入漏洞。例如,您应该通过在信息模式中查找表名来检查表名是否存在。
我同意@OMG Ponies的评论- 这是一种代码味道,您具有结构相同的多个表,因此您希望对完全相同的列进行完全相同的插入。代码气味并不能保证您的设计不好,但是值得考虑。