主键我有一个表,看起来像这样:违反了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