1

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

我创建了一个像

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

如果假设管理员登录并添加任何新手机,则新添加的手机将是最后一个mobileID
现有的 mobileID 值 + 1,因为我们已将. (我已经完成了) mobileIDIDENTITY

但是如果假设最后一个 MOBILEmobileID是 4 并且我正在从数据库中删除它....

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

有什么想法可以克服这个吗?

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

4

3 回答 3

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

于 2013-03-20T18:56:26.893 回答
0

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

于 2013-03-20T18:39:55.907 回答
0

如果您真的非常确定删除的行是最后一行创建的,mobileDetails请执行以下操作:

DECLARE @NewSeed AS INT;

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

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

以下是有关以下内容的更多信息IDENT_CURRENTSQL Server 2008 版本当前版本

以下是有关以下内容的更多信息DBCC CHECKIDENTSQL Server 2008 版本当前版本

于 2020-03-06T15:06:58.220 回答