通过syscolumn将数据从一个表复制到另一个表,具有相同的列名

时间:2017-05-11 08:14:37

标签: sql-server tsql

我有两个表A和B.它们具有相同的列名但类型不同。 现在我想将数据从A复制到B 。但我不想指定列名。我想像这样使用 syscolumns

select name from syscolumns where id=object_id(N'A')

我的SQL查询结构如:

insert into B(dynamicColumnNames...) selec dynamicColumnNames... from A

我想知道如何用syscolumns名称替换dynamicColumnNames部分

顺便说一下,请不要使用商店程序

1 个答案:

答案 0 :(得分:0)

你可以使用以下脚本(确保你知道你在做什么,它不是很好的方法:)):

DECLARE @cmd VARCHAR(MAX)


WITH CTE AS (
            SELECT STUFF((
                        SELECT ', ' + cast(a.COLUMN_NAME as varchar(2000))
                        FROM INFORMATION_SCHEMA.COLUMNS a
                        JOIN INFORMATION_SCHEMA.COLUMNS b ON a.COLUMN_NAME = b.COLUMN_NAME
                        WHERE a.TABLE_NAME = 'A' AND 
                              b.TABLE_NAME = 'B' 
                        FOR XML PATH('')),1,2,'') AS Cols
            )

SELECT @cmd = 'INSERT INTO A ('+CTE.Cols+') SELECT '+CTE.Cols+' FROM B'
FROM CTE

EXEC (@cmd)

此脚本无法解决转换为正确的类型...但也可以从INFORMATION_SCHEMA执行此操作...