我收到以下错误
只有在使用列列表且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
答案 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)