Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 违反主键????即使存在chk,也不要插入记录_Sql_Sql Server 2005 - Fatal编程技术网

Sql 违反主键????即使存在chk,也不要插入记录

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

表2的col1、col2、col3主键

还对条件主键执行了内部联接 添加了一个“如果不存在,请从表2中选择1”“在主键上联接表1”= 始终获取主键冲突错误无法插入


请提供帮助,不要试图找出出现问题的原因,我建议您重新编写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