Создайте оператор INSERT INTO, передавая список переменных, например список столбцов - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть небольшой оператор для извлечения списка столбцов таблицы:

DECLARE @j INT = 1
DECLARE @verifyColumn INT = @pkcounter --it count the number of column of the table
WHILE @j <> @verifyColumn +1
    BEGIN
        set @multipleColumn = @multipleColumn+ (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMN WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = @table_source AND ORDINAL_POSITION = @k) + ','
        SET @j = @j + 1
        set @k = @k + 1
        SET @pkcounter = @pkcounter - 1;
    END

PRINT 'multipleColumn: ' + @multipleColumn

Теперь мне нужно использовать переменную со списком столбцов в операторе вставки, что-то вроде:

INSERT INTO table_name_target (@multipleColumn) SELECT a,b FROM table_name_source

Можно это сделать? Спасибо всем

1 Ответ

2 голосов
/ 30 сентября 2019

Нет, вы должны использовать sp_executesql. Вот так:

DECLARE @multipleColumn VARCHAR(1000) = NULL, -- Must be null
    @schema_name NVARCHAR(128)='dbo',
    @table_source NVARCHAR(128)='<src>',
    @table_target NVARCHAR(128)='<dest>',
    @stmt NVARCHAR(MAX);

SELECT @multipleColumn = COALESCE(@multipleColumn+', ', '') + QUOTENAME(c.COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS AS c
WHERE
    c.TABLE_SCHEMA = @schema_name
    AND c.TABLE_NAME = @table_source;

SET @stmt=CONCAT('INSERT INTO ', QUOTENAME(@table_target),' (', @multipleColumn, ')
SELECT ', @multipleColumn, ' FROM ', QUOTENAME(@table_source), ';');

EXEC sp_executesql @stmt;

И, как всегда, будьте осторожны с sql инъекцией при использовании sp_executesql!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...