我想动态更改 sql 查询中表的名称。例如我有下一个存储过程:
CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text)
BEGIN
INSERT INTO tableName VALUES (message);
END;
我需要改变表名在运行时,我可以这样做吗?
谢谢。
您必须使用动态 SQL 来prepare http://dev.mysql.com/doc/refman/5.1/en/prepare.html and execute http://dev.mysql.com/doc/refman/5.1/en/execute.html一个 SQL 字符串,以实现您所描述的目的。
在准备之前,必须将动态表名称(或列名称、或 SQL 关键字等)插入到 SQL 字符串中。您不能对这些动态元素使用查询参数。
将表名插入 SQL 查询时,请小心避免 SQL 注入漏洞。例如,您应该通过在信息图式 http://dev.mysql.com/doc/refman/5.1/en/tables-table.html.
我同意@OMG Ponies 的评论——这是一个代码气味 http://en.wikipedia.org/wiki/Code_smell您有多个具有相同结构的表,因此您想要对完全相同的列执行完全相同的插入。代码异味并不能保证你的设计很糟糕,但它值得考虑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)