SQL Server标识列在插入时跳过ID - 在日志中未检测到错误

时间:2013-05-07 04:53:03

标签: asp.net sql-server database sql-server-2008 sql-server-2008-r2

我正在使用SQL Server 2008来维护一个数据库,其中我有一个userAcccounts表,其中在网站上注册时存储了用户详细信息。 userID列是一个带有标识的整数。

我注意到的是,不知何故,该列正在跳过一些ID(随机数量的ID,有时它会跳过5,11,10等),即ID不是连续的。我读了similar question here,其中有类似的问题,建议

  

“每次尝试插入时,身份序列都会递增    - 这包括失败或回滚INSERT“

我已经检查了我的日志中的错误,但是在跳过id的期间没有错误。此外,我的插入不在任何事务中进行回滚,因为不需要删除帐户。注册期间也不涉及其他表格

虽然这不是一个主要问题,因为ids将是独一无二的,我想知道的是为什么这种行为? 也许我忽视了一些事情。

是否还有其他可能发生此类行为的情况?即标识栏跳过一些ID?这可能是并发访问的问题吗?

这是表的创建脚本。

CREATE TABLE [dbo].[UserAccounts](
    [AccountID] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [varchar](30) NULL,
    [LastName] [varchar](30) NULL,
    [Gender] [varchar](10) NULL,
    [Email] [varchar](150) NULL,
    [EmailVerified] [bit] NULL,
    [UserName] [varchar](30) NULL,
    [Password] [varchar](50) NULL,
    [ProfilePicture] [varchar](150) NULL,
    [BackgroundPicture] [varchar](150) NULL,
    [DateOfBirth] [smalldatetime] NULL,
    [CreateDate] [smalldatetime] NULL,
    [LastUpdatedOn] [smalldatetime] NULL,
    [Points] [int] NULL,
    [CurrentBadge] [varchar](30) NULL,
    [FBID] [varchar](50) NULL,
    [TwitterID] [varchar](50) NULL,
    [Abused] [int] NULL,
    [isActive] [bit] NULL,
    [AccountTypeID] [int] NULL,
    [DateStamp] [timestamp] NOT NULL,
    [Location] [varchar](50) NULL,
    [About] [varchar](250) NULL,
    [UsingBackgroundPicture] [bit] NULL,
 CONSTRAINT [PK__UserAcco__349DA5867F60ED59] PRIMARY KEY CLUSTERED 
(
    [AccountID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

对此方面的任何帮助表示赞赏?如果您需要任何其他细节,请告诉我。

由于

1 个答案:

答案 0 :(得分:0)

如果没有在每个事务上全局锁定整个数据库,就不可能保证Sequences或ID的准确顺序 - 以防止任何并发事务,这可能也会要求ID。

这显然会将其降低为有效的单用户数据库,并完全破坏性能。

由于这些原因,明确无法保证连续顺序性