SQL Server标识列值从0开始,而不是1

Mux*_*uxa 40 sql t-sql identity sql-server-2005 auto-increment

我有一个奇怪的情况,我的数据库中的一些表从0开始其ID,即使TABLE CREATE具有IDENTITY(1,1).某些表格是这样,但其他表格则不然.它一直工作到今天.

我已经尝试重置标识列:

DBCC CHECKIDENT (SyncSession, reseed, 0);
Run Code Online (Sandbox Code Playgroud)

但是新的记录从0开始.我已经尝试过为所有表做这个,但有些仍然从0开始,有些从1开始.

有什么指针吗?

(我正在使用带有高级服务的SQL Server Express 2005)

gbn*_*gbn 46

来自DBCC CHECKIDENT

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
Run Code Online (Sandbox Code Playgroud)

如果自创建表以来没有向表插入任何行,或者已使用TRUNCATE TABLE语句删除了所有行,则在运行DBCC CHECKIDENT后插入的第一行使用new_reseed_value作为标识.否则,插入的下一行使用new_reseed_value +当前增量值.

因此,对于空表或截断表,这是预期的.

  • 这还没有真正回答这个问题.如何确保种子始终从1开始 - 无论表是否已被使用? (12认同)
  • @Damien:这取决于您之前的工作。您*不能*由于提到的报价。您已经知道以前的操作。或显式截断或重建表。 (2认同)
  • 这太疯狂了!对我来说毫无意义,应该以同样的方式行事。天啊微软... (2认同)

Kei*_*ith 7

如果您传递重新种子值,数据库将从该新值开始标识:

DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment
Run Code Online (Sandbox Code Playgroud)

不过,您不必传递 a 值,如果不传递,IDENTITY(a,b)将改为使用:

DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a'
Run Code Online (Sandbox Code Playgroud)

这通常是更好的做法,因为它使表更接近其初始创建状态。