首页 > 解决方案 > 插入行时出现标识值的 SQL Server 错误

问题描述

这里的情况很奇怪。我正在使用 IDENTITY (1,1) 的主键在表中插入一行,但它使用的值是错误的。这是表格:

CREATE TABLE [dbo].[adm_tm_modulo](
    [id_modulo] [int] IDENTITY(1,1) NOT NULL,
    [codigo] [varchar](255) NULL,
    [descripcion] [varchar](255) NULL,
    [estado] [int] NOT NULL,
    [fecha_actualizacion] [datetime2](7) NULL,
    [fecha_creacion] [datetime2](7) NULL,
    [id_usuario_actualizacion] [int] NOT NULL,
    [id_usuario_creacion] [int] NOT NULL,
    [nombre] [varchar](255) NULL,
    [ruta] [varchar](255) NULL,
PRIMARY KEY CLUSTERED 
(
    [id_modulo] 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

现在,它有 4 行,如您所见:

在此处输入图像描述

但是每当我插入一个新行时,主键就好像 IDENTITY 值从 1000 开始一样。这是我执行 INSERT 后发生的情况:

在此处输入图像描述

我确信我以前从未插入过那么多行,也没有其他任何人,因为这是我自己 PC 中的私有数据库。此外,添加所有表的所有行,它们大约是 400(甚至接近 1000)。我尝试在其他表中插入,但发生了同样的事情,只是在某些表中它插入了一个从 3001 或 4001 等开始的值。它总是从一千之后的第一个数字开始。

任何有关为什么会发生这种情况的帮助将不胜感激。

标签: sql-server

解决方案


您可能想要使用 SEQUENCE 对象,它可以让您更好地控制值生成的行为。 https://docs.microsoft.com/en-us/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver15

另一种选择(我更喜欢更好)是创建一个 INSERT TRIGGER 并定义你想要的逻辑


推荐阅读