1

我收到以下错误

只有在使用列列表并且 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 
4

1 回答 1

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)
于 2013-11-01T10:36:09.580 回答