-1

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

我得到以下错误,

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

我错过了什么吗???

4

1 回答 1

1

如果您需要为插入/选择动态创建查询,则必须使用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 演示

于 2013-08-22T14:42:30.653 回答