我有两个表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部分。
顺便说一下,请不要使用商店程序。
答案 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执行此操作...