在我的应用程序中,使用SQL Server 2005,我有两个表,我们称之为表A和表B;表B中定义了外键约束,引用了表A中的主键列,它是一个自动生成的整数ID。我正在运行以下简单的事务:
Start transaction
Insert a row to table A
Retrieve the last-generated ID ("SELECT @@IDENTITY ... ")
Insert data to table B, using this ID
Commit
一切正常,直到我尝试与另一个SQL Server 2005创建合并复制(连续)。由于外键约束失败,发布者和订阅者在尝试向表B插入数据时现在都失败了此事务:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_TableB_TableA". The conflict occurred in database "MyDB", table "TableA", column 'ID'.
我无法通过在将数据插入表A后提交来使其工作。但是,在删除合并复制后,一切正常。数据库代码使用ADO以C ++编写。
复制是否干扰了事务?还有其他可能的解释吗?
答案 0 :(得分:1)
两个服务器节点上的表A上的主键值是否彼此分离(换句话说,您是否在每个节点使用身份范围管理)?
此外,是否使用Not For Replication property配置了外键约束?
我认为因为您的外键约束已在发布服务器本地强制执行,因此在与订阅服务器合并时无需重新检查它。
答案 1 :(得分:0)
看起来这个问题与@@ IDENTITY函数的范围有关。当我使用LAST_IDENT('TableB')时,事情似乎有效。
如MSDN中所述: