主鍵我有一個表,看起來像這樣:違反了select語句
CREATE TABLE [dbo].[SomeTable](
[Guid] [uniqueidentifier] NOT NULL,
[Column1] [int] NOT NULL,
[Column2] [datetime] NOT NULL,
[Column3] [bit] NOT NULL,
[Column4] [smallint] NOT NULL,
[Column5] [uniqueidentifier] NULL,
[Column6] [varchar](100) NULL,
[Column7] [datetime] NULL,
[Column8] [datetime] NULL,
CONSTRAINT [pkSomeTable] PRIMARY KEY CLUSTERED
(
[Guid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
)
注:該名稱已被更改,以保護無辜。
通過存儲過程,我運行此查詢:
SELECT SomeTable.Guid, SomeTable.Column1, SomeTable.Column2, SomeTable.Column3, SomeTable.Column4, SomeTable.Column5, SomeTable.Column6, SomeTable.Column7, SomeTable.Column8
FROM SomeTable
WHERE SomeTable.Guid = @Guid
ORDER BY SomeTable.Guid
運行在此之後,我得到一個:PRIMARY KEY約束 'pkSomeTable' 的 衝突。無法在對象'dbo.SomeTable'中插入重複鍵。 UniqueKeyConstraintException:重複鍵。
我很困惑我如何能有這樣的異常只運行一個選擇語句。桌子上沒有觸發器。有沒有人有這樣的想法?
編輯: 整個STP是:
CREATE PROCEDURE dbo.stpSelectSomeTable
@Guid UNIQUEIDENTIFIER = NULL
AS
BEGIN
SET NOCOUNT ON
IF (@Guid is NULL)
SELECT SomeTable.Guid, SomeTable.Column1, SomeTable.Column2, SomeTable.Column3, SomeTable.Column4, SomeTable.Column5, SomeTable.Column6, SomeTable.Column7, SomeTable.Column8
FROM SomeTable
ORDER BY SomeTable.Guid
Else
SELECT SomeTable.Guid, SomeTable.Column1, SomeTable.Column2, SomeTable.Column3, SomeTable.Column4, SomeTable.Column5, SomeTable.Column6, SomeTable.Column7, SomeTable.Column8
FROM SomeTable
WHERE SomeTable.Guid = @Guid
ORDER BY SomeTable.Guid
END
GO
我相信GUID不爲空時,該STP被調用。我也確信這是導致問題的陳述。異常的堆棧跟蹤顯示了這一點。事實證明,發生這種情況的數據庫已被刪除並恢復到以前的版本。正因爲如此,我無法測試這個陳述。這是在給我這個問題之前完成的。
雙重和三重檢查導致PK違規的聲明。 是什麼讓你認爲這是SELECT語句? – 2010-01-11 15:04:30
您確定此聲明導致錯誤?您能否單獨運行此聲明以查看問題是否存在?你能不能發佈整個sproc源代碼? – Quassnoi 2010-01-11 15:04:36
存儲過程還有什麼作用?你可以顯示存儲過程的所有代碼,以及你如何調用它? – 2010-01-11 15:08:29