zom*_*pro 5 sql sql-server-2008
我对 SQL Server 2008 的了解有限,我无法确切地找到如何做到这一点。我的想法是使用 SELECT 过程的结果作为列名列表(基于在这个老问题How do you return the columns 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
Run Code Online (Sandbox Code Playgroud)
我想做的是用具有较少列的表中的数据填充一个更大的表(所有这些都包含在更大的表中)。也许有更好的方法来做到这一点。
你不能这样做。您必须使用动态 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);
Run Code Online (Sandbox Code Playgroud)
这是假设在 , 中找到的所有列列表new_table也在第二个表中找到YourTableName,否则,您将收到一条错误消息,指出未找到列名。
在这里查看它的实际效果: