我想动态地将列名提供给存储过程中的INSERT INTO SELECT语句,这样每当有数据库更改时,每次都不需要修改存储过程。
所以我们有一个查询来复制一行
INSERT INTO assets
(name, type, ancestor, created, modified)
SELECT
name, type, id, created, modified
FROM assets
WHERE id = 1
因此,如上所述,每当有db字段编辑或添加时,我都必须每次都修改存储过程。
但是,如果我查询类似
的架构SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db1'
AND TABLE_NAME = 'assets'
在存储过程中,我们现在有一个列名列表。
问题是,如何获取该架构查询的结果并将其插入第一个查询?
我可以看到像
这样的东西SET @variable1 = (SELECT name FROM asset)
将声明一个变量,但如何进行可变数量的列?
然后我有那些变量,我是否可以使用如下的预处理语句来执行INSERT INTO SELECT?
BEGIN
SET @sql = CONCAT('SELECT ', col, ' FROM assets');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
或者甚至有更好的方式找不到?
如果无法做到这一点,我是否至少可以通过存储过程的参数传递并使用INSERT INTO SELECT中的那些?