2011-02-05 108 views
0

使用SQL Server自動遞增問題

表1

ID Name 

001 Raja 
002 Ravi 
003 Suresh 
004 Kamal 
... 

我需要創建一個新表並進行身份爲每列

試圖查詢

insert into table2 
    select * from table1 

預期輸出

S.No ID Name 

1 001 Raja 
2 002 Ravi 
3 003 Suresh 
4 004 Kamal 
... 

我創建了新表並使S.No列成爲表中的標識。它正在爲每一行創建標識號,然後刪除所有行,再次插入,但標識是從最後一行的下一個數字開始創建的。

S.No ID Name 

    1 001 Raja 
    2 002 Ravi 
    3 003 Suresh 
    4 004 Kamal 
    ... 

刪除所有行,再次我插入。每當我刪除所有從表中的行

S.No ID Name 

    5 001 Raja 
    6 002 Ravi 
    7 003 Suresh 
    8 004 Kamal 
    ... 

預計輸出

身份應該從1號開始起。

需要查詢幫助

回答

4

這不是身份是如何工作的。刪除東西不會重置身份字段。你必須註冊它:

DBCC CHECKIDENT (‘databasename.dbo.yourtable’,RESEED, 0) -- will start from 1 
+0

感謝您的答覆,如何寫你提到的查詢中刪除。目前我正在寫從table2刪除*,所以在這裏如何插入您提到的查詢。 – Gopal 2011-02-05 08:03:57

+0

@Gopal:你將需要一個包含**兩條語句的查詢** - 首先你從表'2中刪除*和下一個`DBCC CHECKIDENT(.....,RESEED,0)` - 在其他 – 2011-02-05 09:04:39

2

或者只是截斷表?這也將重置主鍵。
(marc_s:其實,這是IDENTITY價值,它的復位)

TRUNCATE TABLE tablename 
0

如果你想S.No列有自動遞增,這就是價值有(最大號+ 1),

所以您可以創建一個標量函數來查找該值並將列DefaultValue設置爲此函數,並將標識設置爲假

看看這個例子:

CREATE FUNCTION [dbo].[getmaxno]() 
RETURNS int 
AS 
BEGIN 
    DECLARE @ResultVar int 
    SELECT @ResultVar = MAX(no)+1 from dbo.table_1 
    RETURN @ResultVar 
END 

ALTER TABLE [dbo].[Table_1] ADD CONSTRAINT [DF_Table_1_no] DEFAULT ([dbo].[getmaxno]()) FOR [no]