我有一个奇怪的情况,我的数据库中的一些表从0开始其ID,即使TABLE CREATE具有IDENTITY(1,1)。 某些表格是这样,但其他表格则不然。 它一直工作到今天。
我已尝试重置标识栏:
DBCC CHECKIDENT (SyncSession, reseed, 0);
但是新记录从0开始。 我已尝试为所有表执行此操作,但有些仍然从0开始,有些从1开始。
任何指针?
(我正在使用带有高级服务的SQL Server Express 2005)
答案 0 :(得分:44)
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
如果没有插入任何行 表自创建以来,或全部 已删除行使用 TRUNCATE TABLE语句,第一个 运行DBCC后插入的行 CHECKIDENT使用new_reseed_value作为 身份。否则,下一行 inserted使用new_reseed_value + 当前增量值。
因此,对于空表或截断表,这是预期的。
答案 1 :(得分:4)
如果传递重新设定的值,数据库将从该新值开始标识:
DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment
如果不使用IDENTITY(a,b)
,则不必传递a值:
DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a'
这通常是更好的做法,因为它使表更接近其初始创建状态。
答案 2 :(得分:2)
这是合乎逻辑的,因为您已将身份值更改(重新设定)为零?
DBCC CHECKIDENT (SyncSession, reseed, 1)
将重新设置您的标识列,并确保第一个新记录以1开头。
答案 3 :(得分:2)
我遇到同样的问题,在修改数据库后从备份恢复。我只是添加一个虚拟记录然后删除它...然后将RESEED设置为0.似乎工作。
答案 4 :(得分:1)
试试这个
DECLARE @c TABLE (TanvtechId varchar(10),NewTanvtechId Varchar(10))
INSERT INTO @c
SELECT TanvtechId , Row_Number() OVER (ORDER BY TanvtechId ) from Tanvtech
UPDATE G
SET G.TanvtechId =a.NewTanvtechId
FROM Tanvtech as G INNER JOIN @c as a ON a.TanvtechId =G.TanvtechId
答案 5 :(得分:-1)
DBCC CHECKIDENT ( Table_Name, RESEED, 0 )
这是一种使用id
启动Zero(0)
的方法,然后从表中删除所有行并再次将数据放回到表中。