【发布时间】:2015-06-05 18:10:33
【问题描述】:
我有一张桌子
CREATE TABLE [dbo].[DocGenVariable](
[userkey_sessionid] [varchar](38) NOT NULL,
[is_session] [bit] NULL,
[var_name] [nvarchar](255) NOT NULL,
[var_value] [nvarchar](1000) NOT NULL,
[topic_id] [varchar](38) NOT NULL,
[resource_id] [int] NULL,
[added] [datetime] NOT NULL,
CONSTRAINT [PK_DocGenVariable] PRIMARY KEY CLUSTERED
(
[userkey_sessionid] ASC,
[var_name] ASC,
[topic_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
有时(注意>有时)我会收到错误
"Violation of PRIMARY KEY constraint 'PK_DocGenVariable'.
Cannot insert duplicate key in object 'dbo.DocGenVariable'.
当我尝试在此表中添加条目时
delete from DocGenVariable where userkey_sessionid = @key_session and var_name = @var_name and topic_id = @topic_id
if (LTRIM(RTRIM(@var_value)) <> '')
begin
insert into DocGenVariable(userkey_sessionid, is_session, var_name, var_value, topic_id, resource_id, added)
values (@key_session, @is_session, @var_name, @var_value, @topic_id, @resource_id, GetDate())
end
我首先要做的是删除一个必须更新的条目,然后添加一个新条目。
为什么会出现这个约束错误?
【问题讨论】:
-
您的插入语句没有插入到您提供格式的表中。不要发布图片,而是编写
create table语句并发布。 -
您提供了 DocGenAdvVariable 的表 def 和 DocGenVariable 的语句。这些不是同一张桌子。
-
对不起,我的错。这是一张错误的桌子,对不起。现在一定是对的。现在可以查了吗?
-
表上没有其他东西(触发器或指向它的外键)可以阻止删除?
标签: sql tsql transactions sql-update sql-insert