mysql中INSERT INTO SELECT语句的动态列名

时间:2016-02-16 05:31:10

标签: mysql stored-procedures

我想动态地将列名提供给存储过程中的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中的那些?

0 个答案:

没有答案