SQL Serverで動的にSelect Insert文を生成する方法です。
Select Insertって書くのだるいですよね。
なんでSQLを使って動的に生成するSQLを作ってみました。
DECLARE @DBName NVARCHAR(128) = 'aaa';
DECLARE @TableName NVARCHAR(128) = 'bbb';
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'
SELECT
''INSERT INTO '' + QUOTENAME(' + QUOTENAME(@DBName,'''') + N') + ''.''
+ QUOTENAME(t.TABLE_SCHEMA) + ''.'' + QUOTENAME(t.TABLE_NAME) + '' ('' +
ColumnList.List +
'') SELECT '' +
ColumnList.List +
'' FROM '' + QUOTENAME(' + QUOTENAME(@DBName,'''') + N') + ''.''
+ QUOTENAME(t.TABLE_SCHEMA) + ''.'' + QUOTENAME(t.TABLE_NAME) + '';''
AS Generated_InsertSelect_SQL
FROM
' + QUOTENAME(@DBName) + '.INFORMATION_SCHEMA.TABLES AS t
CROSS APPLY (
SELECT STUFF(
(SELECT '', '' + QUOTENAME(c.COLUMN_NAME)
FROM ' + QUOTENAME(@DBName) + '.INFORMATION_SCHEMA.COLUMNS AS c
WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
ORDER BY c.ORDINAL_POSITION
FOR XML PATH('''')),
1, 2, '''') AS List
) AS ColumnList
WHERE
t.TABLE_TYPE = ''BASE TABLE''
AND ColumnList.List IS NOT NULL
AND t.TABLE_NAME = ' + QUOTENAME(@TableName,'''') + N'
ORDER BY
t.TABLE_SCHEMA,
t.TABLE_NAME;
';
EXEC sp_executesql @SQL;
まあ、SQLってよりはSPなのかな。