Вот пример динамического SQL (например, создайте запрос как строку, а затем используйте встроенную процедуру sp_executesql для выполнения запроса).
В этом примере используются STUFF и FOR XML PATH ('') , чтобы объединить несколько запросов вместе и вставлять 'UNION' между каждым.
DECLARE @sql NVARCHAR(MAX) = 'INSERT INTO TestTable (col1, col2) '
SELECT @sql += STUFF(
(SELECT ' UNION SELECT col1, col2 FROM ' + t.name
FROM sys.tables as t
WHERE t.name like 'Fast_a%'
FOR XML PATH('')), 1, 7, '')
EXEC sp_executesql @sql
Итак, для этой схемы:
CREATE TABLE fast_a1 (col1 INT, col2 INT)
CREATE TABLE fast_a2 (col1 INT, col2 INT)
CREATE TABLE fast_aasdf (col1 INT, col2 INT)
CREATE TABLE TestTable (col1 INT, col2 INT)
Создает этот динамический запрос:
INSERT INTO TestTable (col1, col2)
SELECT col1, col2 FROM fast_a1
UNION
SELECT col1, col2 FROM fast_a2
UNION
SELECT col1, col2 FROM fast_aasdf
Edit:
Лиз, запустите эти операторы ( или вот скрипту SQL ) последовательно, и вы увидите, что они вставляют данные:
CREATE TABLE fast_a1 (col1 INT, col2 INT);
CREATE TABLE fast_a2 (col1 INT, col2 INT);
CREATE TABLE fast_aasdf (col1 INT, col2 INT);
CREATE TABLE TestTable (col1 INT, col2 INT);
INSERT INTO dbo.fast_a1 VALUES (1, 1);
INSERT INTO dbo.fast_a2 VALUES (2, 2);
INSERT INTO dbo.fast_aasdf VALUES (3, 3);
DECLARE @sql NVARCHAR(MAX) = 'INSERT INTO TestTable (col1, col2) '
SELECT @sql += STUFF(
(SELECT ' UNION SELECT col1, col2 FROM ' + t.name
FROM sys.tables as t
WHERE t.name like 'Fast_a%'
FOR XML PATH('')), 1, 7, '')
EXEC sp_executesql @sql
SELECT * FROM dbo.TestTable
Возвращает:
col1 col2
1 1
2 2
3 3