天天看點

SQL Server]關于辨別列

SQL Server]關于辨別列從1開始計數的問題 在SQL Server中,  我們有時需要在清空資料表之後,重新添加記錄時,辨別列重新從1開始計數。

      我們隻需要在插入記錄之前,執行下面的指令:

DBCC CHECKIDENT ('表名',  RESEED, 0)

------------------------------------------------------------------------------------------------------------------------

問題:在資料庫中設定了一個字段id,随着記錄的條數進行遞增, 

但現在有一個問題,目前面的記錄(甚至所有的記錄)删除後, 

如何讓id重新來遞增...(從1開始進行遞增..) 

------------------------------------------------------------ --- 

有一個辦法: 

   當你的表中沒有任何記錄的話,那麼,你可以把這個表删除掉,然後再重建立立這個表,當然,結構是一樣的,這樣的話, 你的ID就會重新進行遞增  了! 

 不過我想,這個ID的值應該是記錄在某一個系統表中的,如果要是能查詢到這個表中的相關記錄,修改這個記錄,改變它 的ID的值,這樣做是最好的了! 

------------------------------------------------------------ --- 

DBCC  CHECKIDENT 

檢查指定表的目前辨別值,如有必要,還對辨別值進行更正。 

文法 

DBCC  CHECKIDENT 

       (  'table_name' 

               [  ,  {  NORESEED 

                                 |  {  RESEED  [  ,  new_reseed_value  ]  }   

                       }   

               ]   

       ) 

參數 

'table_name' 

是要對其目前辨別值進行檢查的表名。表名必須符合辨別符規則。有關更多資訊,請參見使用辨別符。指定的表必須包含辨別列。 

NORESEED 

指定不應更正目前辨別值。 

RESEED 

指定應該更正目前辨別值。 

new_reseed_value 

是在辨別列中重新指派時要使用的值。 

注釋 

如有必要,DBCC  CHECKIDENT  會更正列的目前辨別值。然而,如果辨別列是使用  NOT  FOR  REPLICATION  子句(在  CREATE  TABLE  或  ALTER  TABLE  語句中)建立的,則不更正目前辨別值。 

如果辨別列上有主鍵或唯一鍵限制,無效辨別資訊可能會導緻錯誤資訊  2627。 

對目前辨別值所做的具體更正取決于參數規範。 

DBCC  CHECKIDENT  語句  所做的辨別更正   

DBCC  CHECKIDENT  ('table_name',  NORESEED)  不重置目前辨別值。DBCC  CHECKIDENT  傳回一個報表,它指明目前辨別值和應有的辨別值。   

DBCC  CHECKIDENT  ('table_name')  或 

DBCC  CHECKIDENT  ('table_name',  RESEED)  如果表的目前辨別值小于列中存儲的最大辨別值,則使用辨別列中的最大值對其進行重置。   

DBCC  CHECKIDENT  ('table_name',  RESEED,  new_reseed_value)  目前值設定為  new_reseed_value。如果自建立表後沒有将行插入該表,則在執行  DBCC  CHECKIDENT  後插入的第一行将使用  new_reseed_value  作為辨別。否則,下一個插入的行将使用  new_reseed_value  +  1。如果  new_reseed_value  的值小于辨別列中的最大值,以後引用該表時将産生  2627  号錯誤資訊。   

目前辨別值可以大于表中的最大值。在此情況下,DBCC  CHECKIDENT  并不自動重置目前辨別值。若要在目前辨別值大于列中的最大值時對目前辨別值進行重置,請使用兩種方法中的任意一種:   

執 行  DBCC  CHECKIDENT  ('table_name',  NORESEED)  以确定列中的目前最大值,然後使用  DBCC  CHECKIDENT  ('table_name',  RESEED,  new_reseed_value)  語句将該值指定為  new_reseed_value。 

将  new_reseed_value  置為很小值來執行  DBCC  CHECKIDENT  ('table_name',  RESEED,  new_reseed_value),然後運作  DBCC  CHECKIDENT  ('table_name',  RESEED)。   

結果集 

不管是否指定任何選項(針對于包含辨別列的表;下例使用  pubs  資料庫的  jobs  表),DBCC  CHECKIDENT  傳回以下結果集(值可能會有變化): 

Checking  identity  information:  current  identity  value  '14',  current  column  value  '14'. 

DBCC  execution  completed.  If  DBCC  printed  error  messages,  contact  your  system  administrator. 

權限 

DBCC  CHECKIDENT  權限預設授予表所有者、sysadmin  固定伺服器角色和  db_owner  固定資料庫角色的成員且不可轉讓。 

示例 

A.  如有必要,重置目前辨別值 

下例在必要的情況下重置  jobs  表的目前辨別值。 

USE  pubs 

GO 

DBCC  CHECKIDENT  (jobs) 

GO 

B.  報告目前辨別值 

下例報告  jobs  表中的目前辨別值;如果該辨別值不正确,并不對其進行更正。 

USE  pubs 

GO 

DBCC  CHECKIDENT  (jobs,  NORESEED) 

GO 

C.  強制目前辨別值為  30 

下例強制  jobs  表中的目前辨別值為  30。 

USE  pubs 

GO 

DBCC  CHECKIDENT  (jobs,  RESEED,  30) 

GO