SQL表标识种子属性更改没有明显的原因

时间:2014-05-22 15:15:45

标签: .net database sql-server-2012 identity

我有一个程序,其中我在两个不同的地方有两个相同数据库的副本。在这两个数据库中,使用可以向某些表添加新条目,并且在一天结束时,使用执行同步的自定义应用程序来同步数据库。为了确保IDS不会相互交叉,第一个数据库IDS从1开始,另一个数据库从1000000开始。

由于某些原因,似乎某个ID从1开始的数据库转移到1000000,因此当用户在同步后创建新条目时,会发送主键违规并且程序停止工作。

由于种种原因,我无法进行“简单同步”

我尝试使用以下代码在每次同步后“重新设置”表格以防止出现此问题,但即使这样也是如此。

DECLARE @MaxIdSuivi bigint
SELECT @MaxIDSuivi = max(id) from t_Suivis  where id < 1000000
SET @MaxIDSuivi = ISNULL(@MaxIDSuivi,0)
DBCC CHECKIDENT (t_Suivis, reseed, @MaxIDSuivi)

当我手动操作时,我可以看到旧的ID确实设置在1000 000以上,这对我没有任何影响。

有谁知道造成这个问题的原因是什么?

更新:我尝试在手动重新设定后在表格中添加新条目,似乎我可以重新创建问题。 TSQL中的以下代码是否可能导致问题?

SET IDENTITY_INSERT T_Suivis ON

我把它设置为关闭但是,这可能是原因吗?

编辑:经过一些测试后,我发现如果我在一个高于当前种子的表中插入一个ID,那么种子会自动修改以适应我刚插入的那个ID之后的下一个ID。如果我输入1000 002作为例子,种子将更改为1000002,因此下一个id将是1000003,在我的情况下是完全错误的。有没有办法阻止它从服务器中的某些配置或TSQL中的选项中获得满足感?

这导致我们系统出现重大问题。

0 个答案:

没有答案