SQL SERVER ID標識列從新排列

咱們常常使用SQL ServerID自增加,也就是所謂的標識列來充當某張表的主鍵。這裏有兩個概念要澄清:sql

1. 標識列:可用 IDENTITY 屬性創建,使應用程序開發人員得以對錶中所插入的第一行指定標識數字(Identity Seed 屬性),並肯定要添加到種子上的增量(Identity Increment 屬性)以決定後面的標識數字。在向具備標識符列的表中插入值時,經過遞增種子值的方法自動生成下一個標識值。ide

2. 主鍵:可用primary key表示。惟一標識表中的全部行的一個列或一組列。主鍵不容許空值。不能存在具備相同的主鍵值的兩個行,所以主鍵值老是惟一標識單個行。 測試

       那麼,當咱們表中的數據不少,又有些刪除的操做時,標識列就不連貫了,咱們如何讓表中已有記錄的標識列從1開始從新排列,並將標識列的下一個值設爲記錄數加1呢?下面咱們以一張studentid identity(1,1) primary key,name,age)表爲例。spa

(1) 清空表,標識種子置初值,這裏要注意的是下面的語句會清空表中的全部原有數據。 
code

truncate table student

(2) 先要取消標識列,完成下面的語句後再將標識列加上,這樣標識列又能夠按順序遞增了。這裏你能夠直接使用企業管理器操做。orm

declare   @i   int
select   @i   =   0
update   student set @i = @i+1,id = @i

(3) 利用臨時表,步驟就是將表中除id之外的數據拷貝到臨時表中,再清空原表,插入臨時表的數據,最後刪除臨時表。開發

--將數據倒入臨時表rem

select  name,age   into   #   from  student   order   by   id

--清空源表,它同時會重置標識列it

truncate   table   student

--將數據導回源表table

insert   into   student   select   *   from   #

--刪除臨時表  

drop   table   #

在插入測試數據的時候一條一條記錄的插入,這樣太浪費時間,咱們能夠寫一條循環語句加快測試速度:

declare   @i   int  
  set   @i=1  
  while   @i<=100  
        begin  
            insert   into   student   values   ('tbag'+cast(@i as varchar)
,25+@i)  
            set   @i=@i+1  
        end
相關文章
相關標籤/搜索