4

SQL Server 2008 に関する私の知識は限られており、これを行う方法を正確に見つけることができませんでした。私の考えは、SELECT プロシージャの結果を列名のリストとして使用することです (この古い質問で作成されたプロシージャに基づいて、テーブルから列名を返す方法を教えてください) 私は次のようなことをしたいと思います:

INSERT INTO new_table (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName')
SELECT (SELECT COLUMN_NAME,* FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName') FROM YourTableName

私がやろうとしているのは、列の少ないテーブルからのデータで大きなテーブルを埋めることです (それらはすべて大きなテーブルに含まれています)。たぶん、これを行うためのより良い方法があります。

4

1 に答える 1

3

これはできません。これを行うには、次のような動的 SQL を使用する必要があります。

DECLARE @NewTablecols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);


select @NewTablecols = STUFF((SELECT distinct ',' +
                        QUOTENAME(COLUMN_NAME)
                      FROM INFORMATION_SCHEMA.COLUMNS
                      WHERE TABLE_NAME = 'new_table'
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');



SET @query = 'INSERT INTO new_table ( '+ @NewTablecols + ' )
       SELECT ' + @NewTablecols + ' FROM YourTableName';

execute(@query);

new_tableこれは、 にあるすべての列のリストが2 番目のテーブルにもあると想定していますYourTableName。それ以外の場合は、列名が見つからないというエラーが表示されます。

ここで実際にそれを見てください:

于 2013-05-28T12:44:36.723 に答える