我的数据库是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
来自哪里。
答案 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]”插入时有更多确认。