2011-02-05 72 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]