Identity列上的Sql Server 2005主键冲突

Nig*_*gel 4 sql-server primary-key identity-column

我遇到了一个奇怪的问题,我需要一些帮助来解决这个问题.

我有一个数据库,除了所有的应用程序数据列之外,还有一个ID列(定义为int not null,Identity,从1开始,递增1).表的主键是ID列,没有其他组件.

由于应用程序必须允许多次提交相同数据,因此没有可用作"自然主键"的数据集.

我有一个存储过程,这是将新记录添加到表中的唯一方法(除了直接以db所有者身份登录服务器)

虽然QA今天上午测试应用程序,他们进入一个新的记录到数据库中(使用的应用程序,因为它的目的是,当他们已经做了最后两周),并遇到一个主键违反了此表.

这与我十年来一直在做主键的方式相同,并且从未遇到过这种情况.

有想法该怎么解决这个吗?或者这是在很长一段时间内出现的宇宙射线故障之一.

感谢您提出的任何建议.

奈杰尔

美国东部时间6月12日下午1点15分编辑,以提供更多信息

架构的简化版本......

CREATE TABLE [dbo].[tbl_Queries](
[QueryID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[Address] [varchar](150) NOT NULL,
[Apt#] [varchar](10) NOT NULL
    ... <12 other columns deleted for brevity>
[VersionCode] [timestamp] NOT NULL,
 CONSTRAINT [PK_tbl_Queries] PRIMARY KEY CLUSTERED 
(
    [QueryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

(还删除了默认值语句)

存储过程如下

insert into dbo.tbl_Queries
    (   FirstName,
        LastName,
        [Address],
        [Apt#]...) values
    (   @firstName,
        @lastName,
        @address,
        isnull(@apt, ''), ... )
Run Code Online (Sandbox Code Playgroud)

它甚至没有查看标识列,不使用IDENTITY,@@ scope_identity或类似的东西,它只是一个文件而忘记了.

我尽可能地确信身份值没有重置,并且没有其他人使用直接数据库访问来输入值.此项目中唯一使用标识插入的时间是在初始数据库部署中,以在查找表中设置特定值.

QA团队在收到错误后立即再次尝试,并且能够成功提交查询,并且从那时起他们一直在尝试重现它,并且到目前为止还没有成功.

我真的很欣赏这些想法.

Jos*_*gle 6

听起来像身份种子被破坏或以某种方式重置.最简单的解决方案是将种子重置为标识列的当前最大值:

DECLARE @nextid INT;
SET @nextid = (SELECT MAX([columnname]) FROM [tablename]);
DBCC CHECKIDENT ([tablename], RESEED, @nextid);
Run Code Online (Sandbox Code Playgroud)