动态构造的INSERT的SQL语法错误?

时间:2013-11-01 10:18:20

标签: sql-server tsql syntax-error sql-insert

我收到以下错误

  

只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'c365online_script1.dbo.tProperty'中标识列的显式值。

问题在于我从两个嵌套游标中动态构造的语句应该看起来像

INSERT INTO dbo.Table(col1, col2, ...., colN) VALUES(Val1, val2, ...., ValN)

但我不确定如何构造BELOW INSERT语句以类似于上面的内容?。

EXEC('INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id)
SET @Counter = 1 -- set the counter to make sure we execute loop only once.
END 

1 个答案:

答案 0 :(得分:2)

您需要指定列的列表,因为您没有插入所有列(您不插入标识列)。我猜你是从一个具有相同结构的表插入来自不同的数据库 - 在这种情况下你需要指定所有的源列。

您的查询将是(编辑列名称):

EXEC('INSERT INTO ' + @Destination_Database_Name + '.dbo.' + @tablename + '(col1, col2, col3) SELECT col1, col2, col3 FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id)