1
CREATE TABLE [dbo].[tbl_Person](
[PersonID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
[Address] [varchar](50) NULL,
[Phone] [varchar](50) NULL,
 CONSTRAINT [PK_tbl_Person] PRIMARY KEY CLUSTERED 
(
    [PersonID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,     
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

在使用带有查询的存储过程从应用程序插入值时在此表中

INSERT INTO [dbo].[tbl_PersonName]
       ([Name])
 VALUES
       ('name')

“PersonID”列的值异常。该值随机跳跃,从 1896 到 11896,然后再次从 11905 跳跃到 21905。我担心如果发生这种跳跃,范围可能不够,并且数据似乎很无组织。我想知道那些未使用的值是否会被重用?插入一些数据后,我应该怎么做才能重新管理序列?我很担心这个问题,虽然我使用了与 2012 年相同的代码模式,但这并没有在 2010 年发生。帮助我!

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

2

那是因为您试图在主键列中插入一个新列。

如果您有一个表,假设有 1000 行,并且您删除了 797 位置的记录。然后,当您向表中插入新行时,该值将插入到 1001 位置而不是 797。

我想知道那些未使用的值是否会被重用?

不,这些值不会被重用。每当您从表中删除一列然后尝试在表中再次插入该值时,该值将被插入到新位置。

编辑:-

您也可能会发现很有帮助。

Microsoft在 SQL Server 2012 中添加了序列

默认情况下,当您创建 SEQUENCE 时,您可以提供 CACHE 大小。缓存用于通过最小化生成序列号所需的磁盘 IO 数量来提高使用序列对象的应用程序的性能。

要解决此问题,您需要确保在这样的序列创建/属性中添加一个 NO CACHE 选项。

CREATE SEQUENCE TEST_Sequence
    AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 0
    NO MAXVALUE
   NO CACHE

但是,如果您想要相同的旧行为,则可以使用跟踪标志 272

由于跟踪标志 272 选项适用于 OP。以下是添加跟踪标志 272的步骤:-

  1. 打开“SQL Server 配置管理器”
  2. 单击左侧窗格中的“SQL Server 服务”
  3. 右键单击右侧窗格中的 SQL Server 实例名称
  4. 点击“属性”
  5. 点击“启动参数”
  6. 在“指定启动参数”文本框中输入“-T272”
  7. 点击“添加”
  8. 确认更改
于 2013-10-26T10:50:18.363 回答