尝试重置SQL Azure DB表列的标识值

时间:2014-10-10 10:38:55

标签: sql-server sql-server-2008 azure azure-sql-database

我正在使用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值,因为有一天你会发生碰撞。

0 个答案:

没有答案