Sql 违反主键????即使存在chk,也不要插入记录
表2的col1、col2、col3主键 还对条件主键执行了内部联接 添加了一个“如果不存在,请从表2中选择1”“在主键上联接表1”= 始终获取主键冲突错误无法插入Sql 违反主键????即使存在chk,也不要插入记录,sql,sql-server-2005,Sql,Sql Server 2005,表2的col1、col2、col3主键 还对条件主键执行了内部联接 添加了一个“如果不存在,请从表2中选择1”“在主键上联接表1”= 始终获取主键冲突错误无法插入 请提供帮助,不要试图找出出现问题的原因,我建议您重新编写SQL以使用MERGE命令。看 它允许您指定是否存在重复记录时要执行的操作 请注意,如果希望确保存储过程以独占方式运行,则需要执行以下操作: INSERT INTO table 2 SELECT values FROM table 1 LEFT JOIN table 2 ON
请提供帮助,不要试图找出出现问题的原因,我建议您重新编写SQL以使用MERGE命令。看 它允许您指定是否存在重复记录时要执行的操作 请注意,如果希望确保存储过程以独占方式运行,则需要执行以下操作:
INSERT INTO table 2
SELECT values FROM table 1 LEFT JOIN table 2
ON 1.col1 = 2.col1 and
1.col2 = 2.col2 and
1.col3 = 2.col3
WHERE
(
2.col1 IS NULL AND
2.col2 IS NULL AND
2.col3 IS NULL
)
您是否只运行SELECT来检查输出?您可能会看到dupe来自何处。是的,事实上,在插入之前,我从表1中删除了重复项。还有一个进程正在运行b4 my proc,该进程将插入或更新到同一个表中,该表是y I chk(如果记录已在该表中),甚至添加了SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION不想使用一段时间循环并一次执行一行,我将删除表1中的所有重复项。在表1中,我有一个identity列并从表1中删除,其中identity不在select MAXINTITY from table 1 group by col1、col2、col3中,然后甚至在insert之前选择distinct
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE -- most restrictive
BEGIN TRY
BEGIN TRAN
DECLARE @LockResult int
SET @LockName = 'MyLockName'
EXEC @LockResult = sp_getapplock @Resource = @LockName, @LockMode = 'Exclusive', @LockTimeout = 0
if @LockResult <> 0 begin
SET @Failed = 1
end else begin
-- WORK HERE
end
-- FINALIZE TRANSACTION
END TRY
BEGIN CATCH
-- CATCH CODE
END CATCH
SET TRANSACTION ISOLATION LEVEL READ COMMITTED -- set back to default