将记录从一个表复制到另一个对称表,但自动增量IDENTITY字段除外

时间:2013-08-22 14:14:39

标签: sql sql-server sql-server-2008 tsql

我有两个对称表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] 

我收到以下错误,

列名或提供的值数与表定义不匹配。

我错过了什么吗?

1 个答案:

答案 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