天天看點

SQL-Server重置自辨別列 應用

1.重置辨別方法:

  方法一: 

      使用Truncate

      TRUNCATE TABLE name 可以删除表内所有值并重置辨別值 ,但是表内的資料将丢失。

  方法二:

     你想要重置辨別值(不删除資料)采用下面方法即可:但是存在問題:

     1) DBCC CHECKIDENT ('表名', RESEED, new_value)(重置新的辨別值,new_value為新值)

     2) 問題:如dbcc checkident ('表名',reseed,1)即可,但如果表内有資料,則重設的值如果小于目前表

        的辨別最大值,再插入資料時未指定插入的辨別值,這樣會導緻辨別沖突問題,如果你的辨別設定成自

        增的。此外,你也可以用 dbcc checkident('表名',reseed),即可自動重設值,最後生成值。

2.方法擴充介紹

   1)DBCC CHECKIDENT

      DBCC CHECKIDENT ('table_name', RESEED, new_value)

      如dbcc checkident ("bc_pos",reseed,1)即可。也可以用 dbcc checkident("bc_pos",reseed)即可自動

      重設值。

   2)判段一個表是否具有辨別列

      可以使用 OBJECTPROPERTY 函數确定一個表是否具有 IDENTITY(辨別)列.

      用法:Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHASIdentity')如果有,則傳回1,否則傳回0

   3)判斷某列是否是辨別列

      可使用 COLUMNPROPERTY 函數确定 某列是否具有IDENTITY 屬性.

      用法SELECT COLUMNPROPERTY( OBJECT_ID('表名'),'列名','IsIdentity') 是則傳回1,否則傳回0

   4)查詢某表辨別列的列名

     SQL Server中沒有現成的函數實作此功能,實作的SQL語句如下

        語句:SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns

              WHERE TABLE_NAME='表名' AND  COLUMNPROPERTY(     

              OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=1

   5)辨別列的引用

     如果在SQL語句中引用辨別列,可用關鍵字IDENTITYCOL代替

     例如,若要查詢上例中ID等于1的行,以下兩條查詢語句是等價的

           SELECT * FROM T_test WHERE IDENTITYCOL=1

           SELECT * FROM T_test WHERE id =1

   6)擷取辨別列的種子值

     可使用函數IDENT_SEED  用法:SELECT IDENT_SEED ('表名')

   7)擷取辨別列的遞增量

     可使用函數IDENT_INCR  用法:SELECT IDENT_INCR('表名')

   8)擷取指定表中最後生成的辨別值

     可使用函數IDENT_CURRENT  用法:SELECT IDENT_CURRENT('表名')

     注意事項:當包含辨別列的表剛剛建立,為經過任何插入操作時,使用IDENT_CURRENT函數得到的值為辨別

     列的種子值,這一點在開發資料庫應用程式的時候尤其應該注意。

http://blog.sina.com.cn/s/blog_75a1e9e50100ts7q.html