违反PRIMARY KEY约束的列我没有设置它

时间:2013-12-30 07:37:36

标签: sql sql-server unique-constraint

我的数据库是SQL Server。我想在RequestId中插入重复的密钥,然后遇到此错误。

此外:我的数据库由Visual Studio Sql Server 2008 Server Project

创建

我确定表中没有约束。

列都不是PRIMARY KEY

CREATE TABLE [dbo].[RequestPrize] (
    [RequestId] INT           NOT NULL,
    [PrizeId]   INT           NULL,
    [Verified]  BIT           NOT NULL,
    [Created]   SMALLDATETIME NOT NULL
);

但是当我插入RequestId的重复键时:

insert into [RequestPrize] (RequestId, PrizeId) values('138', 9)

错误输出:

  

违反PRIMARY KEY约束'PK_RequestPrize'。无法在对象'dbo.RequestPrize'中插入重复键。

然后我尝试放弃这个约束,

ALTER TABLE [RequestPrize] DROP CONSTRAINT RequestId

错误:

  

Msg 3728,Level 16,State 1,Line 1
  'RequestId'不是约束。
  消息3727,级别16,状态0,行1   无法删除约束。查看以前的错误。

更新 我真的想知道CONSTRAINT来自哪里。

2 个答案:

答案 0 :(得分:1)

没有PK一切正常 -

CREATE TABLE dbo.RequestPrize
(
    [RequestId] INT           NOT NULL,
    [PrizeId]   INT           NULL,
    [Verified]  BIT           NOT NULL DEFAULT 0,
    [Created]   SMALLDATETIME NOT NULL DEFAULT GETDATE()
)
GO

INSERT INTO dbo.RequestPrize (RequestId, PrizeId) 
VALUES (138, 9)
GO

INSERT INTO dbo.RequestPrize (RequestId, PrizeId) 
VALUES (138, 9)
GO

所以放弃(如果存在)你的PK -

IF EXISTS(
    SELECT 1 
    FROM sys.objects o
    WHERE o.type = 'PK'
        AND o.parent_object_id = OBJECT_ID('dbo.RequestPrize', 'U')
) ALTER TABLE dbo.RequestPrize DROP CONSTRAINT PK_RequestPrize

答案 1 :(得分:0)

要删除约束,您必须在创建“PK_RequestPrize”时使用您指定的约束的别名。

通过语法我猜你正在使用Microsoft SQLserver,以确保检查查询浏览器是否连接到正确的数据库。

使用“[dbo]。[RequestPrize]”插入时有更多确认。

enter image description here