2010-11-12 32 views
8

我可以使用RESEED標識列

DBCC CHECKIDENT(<table_name>, RESEED, value) 

命令標識列電流值恢復到原來的SQL Server 2008中?

如果是,這是做這個操作沒有任何缺點的正確方法嗎? 如果沒有,是否有替代方法呢?

+1

你的問題是什麼? – Andomar 2010-11-12 13:35:48

+2

其實這裏有三個問題。我確信你可以看到他們...如果你需要進一步的解釋,只需詢問 – Lorenzo 2010-11-12 13:46:40

回答

7

我可以使用DBCC CHECKIDENT命令將標識列當前值重置爲SQL Server 2008中的原始值嗎?

是的。

如果是的話,這是做這個操作沒有任何缺點的正確方法嗎?

這是一個記錄的方式。

可能的缺點:您最終可能會得到重複的IDENTITY值 - SQL Server無法保證它不會返回尚未使用的值。

E.g.如果您的IDENTITY目前是100,並且您將其重置爲1,則機會遲早會產生一個已使用的值。

在SQL Server中實現的IDENTITY不檢查現有的值或任何東西 - 它只是產生連續的數字。這取決於你 - 尤其是如果你在IDENTITY上做了RESEED以確保值不重複。

10

該值可以省略。 所以如果你使用

DBCC CHECKIDENT (<table_name>, RESEED); 

SQL Server將IDENT值到正確的下一個數字 - 根據已在使用的數字。 這是我知道重新識別身份值的唯一方法。

+0

這並沒有工作,直到我明確給出了種子值 – Niraj 2015-05-22 05:42:36

+0

EG:設置你的身份從2000年開始: DBCC CHECKIDENT(,RESEED,2000 )' – Tr1stan 2015-07-31 10:23:03

0

它有一個很大的缺點,當且僅當feild是主鍵並且引用任何其他表中的任何外鍵時。重新播種有助於獲取在該字段上具有索引的事務表中的記錄。