我有一个看起来像这样的表:

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

运行此后,我得到:
违反主键约束“pkSomeTable”。无法在对象“dbo.SomeTable”中插入重复键。
UniqueKeyConstraintException:重复的密钥。

我对如何仅运行一条select语句这样的异常感到非常困惑。桌上没有触发器。有谁知道这是怎么发生的?

编辑:
整个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

我确定调用此STP时GUID不为null。我也确信这是引起问题的陈述。异常的堆栈跟踪向我展示了这一点。事实证明,发生这种情况的数据库已被删除并恢复到以前的版本。因此,我无法测试该语句。那是在把这个问题交给我之前完成的。

最佳答案

我怀疑您误解了SQL错误消息,该消息告诉您检测到错误的行。

行号将相对于发生错误的查询批处理的开始。 GO用作批处理分隔符。因此,以下示例将报告INSERT上的PK错误发生在第1行。

/*A comment
Next line starts a new batch*/
GO
INSERT INTO T1 VALUES(1)

最肯定的是,评论不对PK违反负责。

编辑
要找出问题所在,请通过注释掉不相关的部分来运行脚本“片断式”的部分。

07-24 19:25
查看更多