我遇到了一個奇怪的問題,我需要一些幫助,試圖找出它。在標識列上的SQL Server 2005主鍵違規
我有一個數據庫,除了所有的應用程序數據列之外,還有一個ID列(定義爲int not null,Identity,從1開始,增加1)。該表的主鍵是ID列,沒有其他組件。
由於應用程序必須允許多次提交相同數據,因此沒有可用作「自然主鍵」的數據集。
我有一個存儲過程,這是添加新記錄到表中的唯一方法(除了登錄到服務器直接作爲數據庫所有者以外)
雖然QA今天上午測試應用程序,他們對在數據庫中輸入一條新記錄(按照預期使用應用程序,並且像過去兩週一樣),並在此表中遇到主鍵違例。
這與我一直在做主鍵約10年的方式一樣,並且從來沒有遇到過這種情況。
有關如何解決此問題的任何想法?或者是這種宇宙射線故障之一在很長一段時間內出現一次。
感謝您的任何建議,你可以給。
奈傑爾
在下午1:15 EDT 6月12日編輯,以提供更多的信息
架構的簡化版本...
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]
(也去掉了默認值語句)
存儲過程如下
insert into dbo.tbl_Queries
( FirstName,
LastName,
[Address],
[Apt#]...) values
( @firstName,
@lastName,
@address,
isnull(@apt, ''), ...)
它甚至沒有看標識列,也沒有使用IDENTITY,@@ scope_identity或類似的東西,它只是一個文件而已。
我很自信,因爲我的身份值沒有被重置,也沒有其他人使用直接數據庫訪問來輸入值。此項目中唯一使用身份插入的時間是在初始數據庫部署中設置查找表中的特定值。
QA團隊在得到錯誤後再次嘗試,並且能夠成功提交查詢,並且從那時起他們一直試圖複製它,並且迄今爲止尚未成功。
我真的很欣賞這些想法的人。
嗯......任何機會,你可以粘貼一個消毒表架構和/或有問題的插入語句? – ristonj 2009-06-12 14:44:05
您是否仍然無法添加新記錄,或者是否只發生一次? – 2009-06-12 14:44:36
查看下面我的答案奈傑爾... – Eric 2009-06-12 16:05:11