在sql server中使用查询输出作为列名

时间:2013-05-28 12:25:36

标签: sql sql-server-2008

我在SQL Server 2008中的知识有限,我找不到具体如何做到这一点。我的想法是使用SELECT过程的结果作为列名列表(基于在这个旧问题How do you return the column names from a table?中创建的过程)我想做类似的事情:

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

我要做的是用一个包含较少列的表中的数据填充一个更大的表(所有这些都包含在更大的表中)。也许有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分: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中找到,否则,您将收到错误消息,指出未找到列名。< / p>

请在此处查看: