【发布时间】:2012-05-15 12:58:44
【问题描述】:
我正在使用如下创建的表:
CREATE TABLE [dbo].[Tag](
[TagID] [int] IDENTITY(1,1) NOT NULL,
[Value] [varchar](200) NOT NULL,
[TagCount] [varchar](200) NULL,
CONSTRAINT [PK_Tag] PRIMARY KEY CLUSTERED
(
[TagID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我永远不能插入一个主键,它只是从最后一个自动继续。所以如果我最后一个条目的主键是 72,那么下一个条目就是 73。
现在我的问题是当我删除一个条目时。现在说我删除了条目的 3-7,我的数据库将存储条目的 1、2、8、9 等。
是否有一个存储过程可以在我删除后运行以仅自动转移我的主键再次从 1 排序?
【问题讨论】:
-
你可以,但我不得不质疑“为什么?”
-
它这样工作是有充分理由的,这样你就不会随着时间的推移给两个不同的东西提供相同的 ID。假设你有一个收据数据库,你不小心删除了一些收据,一个新客户进来,现在两个客户有一个 ID 相同的收据?!巫术。
-
您正在寻找
RESEED索引。请参阅此处了解您将遇到的语法和问题:stackoverflow.com/a/4165362/1016183 -
“编程目的”——我们面前的喜剧演员。
-
@Pomster 我同意你的观点,它看起来不整洁,但它应该是这样的。没有两种方法。正确胜于整洁!
标签: sql sql-server database sql-server-2008 stored-procedures