我已经与我的数据库中的一些表从0开始的ID,即使表中创建具有IDENTITY(1,1)有一个奇怪的现象。 这让一些表,但不是为别人。 它一直到今天。
我已尝试重置标识列:
DBCC CHECKIDENT (SyncSession, reseed, 0);
但是,新的记录从0开始,我试图这样做的所有表,但仍有部分从0和一些从1开始。
任何指针?
(我使用SQL Server Express 2005具有高级服务)
我已经与我的数据库中的一些表从0开始的ID,即使表中创建具有IDENTITY(1,1)有一个奇怪的现象。 这让一些表,但不是为别人。 它一直到今天。
我已尝试重置标识列:
DBCC CHECKIDENT (SyncSession, reseed, 0);
但是,新的记录从0开始,我试图这样做的所有表,但仍有部分从0和一些从1开始。
任何指针?
(我使用SQL Server Express 2005具有高级服务)
从DBCC CHECKIDENT
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
如果没有行已经插入表中,因为它被创造,或者所有行已经通过使用TRUNCATE TABLE语句删除,之后插入的第一行运行DBCC CHECKIDENT使用new_reseed_value的身份。 否则,插入的下一行使用new_reseed_value +当前增量值。
所以,这有望为空或截断表。
如果你传递一个补种值数据库将开始新的价值认同:
DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment
你不必虽然传递的值,如果你不IDENTITY(a,b)
将被用来代替:
DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a'
这通常是更好的做法,因为它离开桌子接近其最初创建的状态。
这是合乎逻辑的,因为你已经改变(补种)的标识值为零?
DBCC CHECKIDENT (SyncSession, reseed, 1)
将补种您的身份列,并确保第一个新记录将与1开始。
我有同样的问题,修改后的数据库从备份恢复。 我只需添加一个虚拟的记录,然后将其删除...然后设置RESEED 0似乎工作。
试试这个
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
DBCC CHECKIDENT ( Table_Name, RESEED, 0 )
这是启动一个办法id
与Zero(0)
然后删除所有从表中的行,并再次把数据回表。