自动增量问题

时间:2011-02-05 07:56:39

标签: sql sql-server sql-server-2005

使用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号开始。

需要查询帮助

3 个答案:

答案 0 :(得分:4)

这不是身份的运作方式。删除内容不会重置身份字段。你必须重新安置它:

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

答案 1 :(得分:2)

或者只是截断表格?这也将重置主键 (marc_s:实际上,它正在重置 IDENTITY 值)

TRUNCATE TABLE tablename

答案 2 :(得分:0)

如果你想要S.No列有自动增量并且该值有(最大No + 1),

因此您可以创建标量函数来查找该值并将DefaultValue列设置为此函数并将标识设置为false

看看这个样本:

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]