【发布时间】:2021-05-20 04:27:09
【问题描述】:
我正在为每一行创建一个带有索引号 (CustRef) 的数据库表。
索引从 1 开始,每新行增加 1。查询语言如下:
CREATE TABLE [dbo].[CustDetails]
(
[CustRef] [int] IDENTITY(1,1) NOT NULL,
[LName] [nchar](25) NOT NULL,
[FName] [nchar](25) NOT NULL,
[Address] [nchar](80) NULL,
[Suburb] [nchar](25) NULL,
[State] [nchar](5) NULL,
[PCode] [nchar](5) NULL,
CONSTRAINT [PK_CustDetails]
PRIMARY KEY CLUSTERED ([CustRef] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
表已成功创建,我正在通过插入一些示例数据对其进行测试。在一个阶段,我删除了一行,索引号(CustRef)为 6。删除索引 6 行后,继续插入示例数据。
很遗憾,索引号不是连续的。换句话说,我期待新的数据内容将使用索引 6 作为其行索引号。但是,新条目跳过索引 6,它从索引 7 开始。
从上面的截图可以看出,在索引 5 和 7 之间,缺少索引 6。
如何解决这个问题?提前致谢。
【问题讨论】:
-
SQL Server 中的标识列就是这样工作的——这是怎么回事?你不应该关心你的 ID 是什么。
-
删除的身份值不会被“回收”是一件好事!不要再浪费精力尝试这样做了....首先,身份需要唯一。
-
另外根据问题指南,请不要发布代码、数据、错误消息等的图像 - 复制或在问题中键入文本。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
没有问题。这就是身份列被记录为工作的方式。它们肯定会增加,但并非没有间隙。这是一项提高性能的功能。
标签: sql sql-server tsql