Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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 每年新增一千万行,重复一千次day@student35k tps=“每秒35000个事务”。TRY CATCH通过捕获唯一约束冲突错误(错误号2627)并忽略它来防止插入重复条目。如果不是2627,则CATCH只会重新显示错误。此代码段存在问题,因为唯一索_Sql_Sql Server_Tsql_Concurrency_Locking - Fatal编程技术网

Sql 每年新增一千万行,重复一千次day@student35k tps=“每秒35000个事务”。TRY CATCH通过捕获唯一约束冲突错误(错误号2627)并忽略它来防止插入重复条目。如果不是2627,则CATCH只会重新显示错误。此代码段存在问题,因为唯一索

Sql 每年新增一千万行,重复一千次day@student35k tps=“每秒35000个事务”。TRY CATCH通过捕获唯一约束冲突错误(错误号2627)并忽略它来防止插入重复条目。如果不是2627,则CATCH只会重新显示错误。此代码段存在问题,因为唯一索,sql,sql-server,tsql,concurrency,locking,Sql,Sql Server,Tsql,Concurrency,Locking,每年新增一千万行,重复一千次day@student35k tps=“每秒35000个事务”。TRY CATCH通过捕获唯一约束冲突错误(错误号2627)并忽略它来防止插入重复条目。如果不是2627,则CATCH只会重新显示错误。此代码段存在问题,因为唯一索引冲突为错误2601。所以你必须检查这两种代码。此解决方案也仅适用于单行插入。如果尝试从一个表插入到另一个表,则需要不同的策略。在这种情况下,可以删除“WHEN MATCHED THEN”,因为Adam只需要在缺少时插入,而不需要向上插入。很抱


每年新增一千万行,重复一千次day@student35k tps=“每秒35000个事务”。TRY CATCH通过捕获唯一约束冲突错误(错误号2627)并忽略它来防止插入重复条目。如果不是2627,则CATCH只会重新显示错误。此代码段存在问题,因为唯一索引冲突为错误2601。所以你必须检查这两种代码。此解决方案也仅适用于单行插入。如果尝试从一个表插入到另一个表,则需要不同的策略。在这种情况下,可以删除“WHEN MATCHED THEN”,因为Adam只需要在缺少时插入,而不需要向上插入。很抱歉,但不需要在merge语句中添加保持锁定提示,您将遇到OP所关心的确切问题。有关@EBarr的更多信息,请参阅point@MartinSmith-这正是我遇到这个问题时读到的文章!感谢您的参考。MSDN文档(在性能提示中)指出,除非需要复杂性,否则您应该在不存在的位置使用插入而不是合并。。。这正是我在上一个答案中被忽略的一点+向你们两个致敬!
INSERT INTO TheTable
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WHERE
        PrimaryKey = @primaryKey)
INSERT INTO TheTable
WITH
    (HOLDLOCK,
    UPDLOCK,
    ROWLOCK)
SELECT
    @primaryKey,
    @value1,
    @value2
WHERE
    NOT EXISTS
    (SELECT
        NULL
    FROM
        TheTable
    WITH
        (HOLDLOCK,
        UPDLOCK,
        ROWLOCK)
    WHERE
        PrimaryKey = @primaryKey)
INSERT INTO TheTable 
SELECT 
    @primaryKey, 
    @value1, 
    @value2 
WHERE 
    NOT EXISTS 
    (SELECT 0
     FROM TheTable WITH (UPDLOCK, HOLDLOCK)
     WHERE PrimaryKey = @primaryKey) 
     DECLARE @existing varchar(10)
    SET @existing = (SELECT primaryKey FROM TABLE WHERE param1field = @param1 AND param2field = @param2)

    IF @existing is not null
    BEGIN
    INSERT INTO Table(param1Field, param2Field) VALUES(param1, param2)
    END
    ELSE
    Return 0
END
BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH
MERGE INTO Target
USING (VALUES (@primaryKey, @value1, @value2)) Source (key, value1, value2)
ON Target.key = Source.key
WHEN MATCHED THEN
    UPDATE SET value1 = Source.value1, value2 = Source.value2
WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, ReasonType) VALUES (@primaryKey, @value1, @value2)
    BEGIN TRY
       INSERT etc
    END TRY
    BEGIN CATCH
        IF ERROR_NUMBER() <> 2627
          BEGIN
                DECLARE @ErrorMessage NVARCHAR(4000);
                DECLARE @ErrorSeverity INT;
                DECLARE @ErrorState INT;

                SELECT @ErrorMessage = ERROR_MESSAGE(),
                @ErrorSeverity = ERROR_SEVERITY(),
                @ErrorState = ERROR_STATE();

                    RAISERROR (
                        @ErrorMessage,
                        @ErrorSeverity,
                        @ErrorState
                    );
          END
    END CATCH