我想在 sql 查询中动态更改表的名称。例如我有下一个存储过程:
CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text)
BEGIN
INSERT INTO tableName VALUES (message);
END;
我需要在运行时更改tableName,我可以做还是不做? 谢谢。
最佳答案
您必须使用动态 SQL 来 prepare和 execute一个 SQL 字符串,以实现您所描述的内容。
动态表名(或列名,或 SQL 关键字等)必须在准备之前插入到 SQL 字符串中。您不能对这些动态元素使用查询参数。
将表名插入 SQL 查询时,请小心避免 SQL 注入(inject)漏洞。例如,您应该通过在 information schema 中查找表名来检查它是否存在。 .
我同意@OMG Ponies 的评论——这是 code smell您有多个具有相同结构的表,因此您想对完全相同的列执行完全相同的插入。代码味道并不能保证您的设计不好,但值得考虑。
关于sql - MySQL存储过程动态修改表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662850/