我正在使用SQL Azure。我有一个部署DB和一个测试数据库
我想在测试数据库中添加一些新的查找记录,以测试新代码。
最初我的部署数据库的标识设置为200,000+用于PK,我的测试数据库设置为100000+,以防止在使用Redgates的SQL数据比较等工具进行同步时发生PK冲突。
不幸的是我犯了一个错误,并将Deployment DB复制为新的测试数据库,因为我们需要一个更新的数据集。因此,我的测试数据库现在从200000+开始。因此,在与Deployment DB同步时,我现在可能会发生冲突。
我只会使用:
DBCC CHECKIDENT('TableName', RESEED, 105000)
但是,SQL Azure不支持此功能。
我遇到过一种解决方法:
set identity_insert TableName on -- this basically turns off IDENTITY
INSERT INTO TableName(id, name) VALUES (104999,'Test Reset Identity Start 104999') -- so we can jam any value for column ID
set identity_insert TableName off -- then turn it back on
INSERT INTO TableName(name) VALUES ('Test Reset Identity End') -- ID starts at 105000, in theory, from this point
SELECT * FROM TableName
然而,新的Identify值似乎总是将表中最高的PK作为最后一个种子,而不是最后一个插入记录的PK值。
我宁愿不重建这张桌子。
是否有另一种方法来重置我的情况的身份值,即更少的数字,即104999,而不是当前的204999?
提前致谢。
编辑1
可能我只能将身份值检查为大于当前值的值,即说206000?
编辑2
也许存在一个论点,即即使有100,000个备用号码,也不应该将Identity值重新设置为小于最大PK值,因为有一天你会发生碰撞。