2013-05-28 42 views
4

我在SQL Server 2008中的知識是有限的,我無法準確找到如何做到這一點。我的想法是使用SELECT過程的結果作爲列名的列表(基於這個老問題產生的過程How do you return the column names from a table?)我想這樣做:在sql服務器中使用查詢輸出作爲列名

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 

我想什麼做的是用一個列數較少的表格填充更大的表格(全部包含在較大的表格中)。也許有更好的方法來做到這一點。

回答

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發現列的所有列表中,第二個表YourTableName的ALOS發現,否則,你會得到一個錯誤說沒有找到列名。

看到它在這裏的行動:

+0

我忘了指定的表是基於在不同的數據庫。由於這種情況,我應該考慮什麼? –

+0

@JorgePM對於'INSERT'語句,以'DatabaseName.SchemaName.TableName'的形式使用完全限定的表名,併爲腳本集'USE databasename;'獲取第一個表的列名。 –

+0

太棒了!它工作完美,謝謝! –