MySQL存储过程动态更改表名

3

我希望动态地更改 SQL 查询中的表名。例如,我有以下存储过程:

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

我需要在运行时更改tableName,我能否这样做? 谢谢。


这是一个高度可疑的数据模型,因为它具有多张表,这些表中都包含了相同数据类型的消息列... - OMG Ponies
1个回答

0

你必须使用动态SQL来准备执行一个SQL字符串,以实现你所描述的功能。

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

在将表名插入到SQL查询中时,要注意避免SQL注入漏洞。例如,你应该通过在信息模式中查找它来检查表名是否存在。

我同意@OMG Ponies的评论——如果你有多个具有相同结构的表格,以至于你想要在完全相同的列上进行完全相同的插入操作,那么这是一种代码异味。代码异味并不保证你的设计有问题,但值得考虑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接