我正在为移动公司做一个项目(第二次使用手机可供出售)....
我创建了一个类似
的表格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 .....
有任何想法可以克服这个问题吗?
真的很抱歉我的英语不成熟,并提前感谢你的帮助:)
答案 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 version和Current version
有关DBCC CHECKIDENT
的更多信息:SQL Server 2008 version和Current version