当一行被删除时,有没有办法减少SQL中的IDENTITY值?

时间:2013-03-20 17:49:14

标签: sql sql-server-2008

我正在为移动公司做一个项目(第二次使用手机可供出售)....

我创建了一个类似

的表格
CREATE TABLE mobileDetails  
(  
       mobileID           INT IDENTITY PRIMARY KEY,  
       mobileModel        VARCHAR(20),  
       price              VARCHAR(20),  
)

如果假设管理员已登录并添加任何新手机,则新添加的手机mobileID
由于我们已将mobileID作为IDENTITY,因此将是最后一个现有的mobileID值+ 1。 (我已经完成了这件事)

但是如果假设最后一个MOBILE' mobileID是4并且我将其从数据库中删除....

之后如果假设我添加了一个新的移动设备,那么数据库应该将新添加的移动设备ID作为4,而不是给我5 .....

有任何想法可以克服这个问题吗?

真的很抱歉我的英语不成熟,并提前感谢你的帮助:)

3 个答案:

答案 0 :(得分:1)

要检查表上的当前种子信息,请使用:

DBCC CHECKIDENT ('table_name', NORESEED)  
例如,如果删除最后一条记录,则种子将不会保持一致性:
Checking identity information: current identity value '8', current column value '7'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

然后您可以使用以下查询重新设置它,然后如果插入新记录,它将从已删除的记录中启动种子:

DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 

对于您的情况,我创建了与您相同的表并插入了一些记录:


mobileID    mobileModel price
1   aaa 1111
2   bbbb    2222
4   aaa 1111
5   bbbb    2222
6   aaa 1111
7   bbbb    2222
8         cccc      3333
然后删除最后一条记录:


mobileID    mobileModel price
1   aaa 1111
2   bbbb    2222
4   aaa 1111
5   bbbb    2222
6   aaa 1111
7   bbbb    2222

要使下一条记录从8开始,我可以运行:

DBCC CHECKIDENT ('mobileDetails', RESEED,7) 

然后插入3条新记录:


mobileID    mobileModel price
1   aaa 1111
2   bbbb    2222
4   aaa 1111
5   bbbb    2222
6   aaa 1111
7   bbbb    2222
8   aaa 1111
9   bbbb    2222
10  cccc    33333

答案 1 :(得分:0)

DBCC CHECKIDENT ("mobileDetails", RESEED, select max(mobibleID) from mobileDetails);

答案 2 :(得分:0)

如果确实如此,请确保已删除的行是在mobileDetails中创建的最后一行,请执行以下操作:

DECLARE @NewSeed AS INT;

SET @NewSeed = IDENT_CURRENT('mobileDetails') - 1;

DBCC CHECKIDENT ('mobileDetails', RESEED, @NewSeed);

有关IDENT_CURRENT的更多信息:SQL Server 2008 versionCurrent version

有关DBCC CHECKIDENT的更多信息:SQL Server 2008 versionCurrent version