C# 自动编号不是按顺序生成的

C# 自动编号不是按顺序生成的,c#,sql,sql-server,sql-server-2008,C#,Sql,Sql Server,Sql Server 2008,我的一个表包含一个自动编号feild ShiftPk,我使用它作为该表的主键,但是当我向记录中插入值时,生成的主键不是顺序主键 我知道自动编号不必总是连续的,但我的所有其他自动编号都是按顺序工作的。请在下面找到我的脚本,如果我的部分有任何问题,请给出建议 ****** Object: Table [dbo].[ShiftMasterNew_tbl] Script Date: 03/09/2013 13:21:13 ******/ SET ANSI_NULLS ON GO SET

我的一个表包含一个自动编号feild ShiftPk,我使用它作为该表的主键,但是当我向记录中插入值时,生成的主键不是顺序主键

我知道自动编号不必总是连续的,但我的所有其他自动编号都是按顺序工作的。请在下面找到我的脚本,如果我的部分有任何问题,请给出建议

   ****** Object:  Table [dbo].[ShiftMasterNew_tbl]    Script Date: 03/09/2013 13:21:13 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[ShiftMasterNew_tbl](
    [ShiftPK] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    [ShiftName] [varchar](50) NOT NULL,
    [Duration] [numeric](18, 0) NULL,
 CONSTRAINT [PK_ShiftMasterNew_tbl] PRIMARY KEY CLUSTERED 
(
    [ShiftPK] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_ShiftMasterNew_tbl] UNIQUE NONCLUSTERED 
(
    [ShiftName] 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

SET ANSI_PADDING OFF
GO

是什么使此选项卡自动编号与其他选项卡不同

数据是如何插入到表中的?我怀疑您的身份栏中是否有空白,例如,它如下所示:

1
2
5
6
8
9
10
15
…这可能是在将数据插入表时出现问题的征兆。您能否在
OP
中添加有关更新过程的更多信息


正如评论所说,它肯定是连续的,但可能存在差距。如果您需要向自己证明它们是连续的,您能否添加一个日期时间字段,如“WhenUpdate”?

我想我发现了问题。任何插入失败的尝试都会消耗一个标识符

例如,如果我插入 1. 2. 3. 然后插入失败

然后,如果我插入下一个,它的标识符是


5

IDENTITY
生成序列号-下一个总是比前一个大-但不能保证这些数字之间没有任何间隙。可能会有差距——那又怎样?重要的是,数字确实在不断增加——其他任何事情都不相关。增量设置为
1
,因此它们应该按顺序生成。您看到的间隙可能是由于插入失败(回滚)或删除的行造成的。2012年可能也会出现差距,这有什么关系?您不能依赖于
IDENTITY
值是连续的。如果插入失败(例如尝试将
NULL
插入不可为空的列),则数字将递增,但不会插入行。下次插入时,数字再次递增,但会有一个间隙。系统按设计工作。谢谢frnds..但我好奇的是,我觉得我在插入时造成的时间延迟也会产生一些影响..我知道这是一个疯狂的想法,但它看起来是这样的..当我在上一次插入后花2分钟进入a记录时,下一个shiftpk增加了2,当我接受5次MNT时,它增加了5次……这是一个我观看的场景,可能是因为我对这个问题过于兴奋