我有两个对称表Table1&表2,ID是定义为自动增量的IDENTITY字段的字段,我试图使用以下查询将记录从Table1复制到Table2,
INSERT INTO [dbo].[Table2]
SELECT
(
SELECT c.name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
where SCHEMA_NAME(schema_id) = 'dbo'
AND t.name = 'Table2' AND c.name !='ID'
) FROM [dbo].[Table1]
我收到以下错误,
列名或提供的值数与表定义不匹配。
我错过了什么吗?
答案 0 :(得分:1)
如果需要为insert / select动态创建查询,则必须使用STUFF..FOR XML
构造使用动态sql和字符串连接:
这样的事情:
DECLARE @cols VARCHAR(MAX)
SELECT @cols =
STUFF( (SELECT ', ' + name
FROM sys.columns
WHERE object_id = object_id('Table2')
AND name <> 'ID'
FOR XML PATH('')),1,1,'')
DECLARE @sql VARCHAR(MAX)
SELECT @sql = 'INSERT INTO [dbo].[Table2] (' + @cols + ')
SELECT ' + @cols + ' FROM [dbo].[Table1]'
EXEC (@sql)
<强> SQLFiddle DEMO 强>