zoukankan      html  css  js  c++  java
  • SQL 数据过度事务模板

     1 -- 一、什么是数据过渡?
     2 --  在系统上线时,有时候需要对历史已有的数据做过渡处理
     3 
     4 -- 二、数据过渡几个需要注意的点:
     5 --  1、尽量套个事务,执行失败之后回滚事务
     6 --  2、尽量做到该数据过渡可以重复执行,而不会有“后遗症”
     7 --  3、在执行 UPDATE、DELETE 等之类的语句时,如果对预期影响的行数明确的话,尽量在语句执行后加个 "IF @@ROWCOUNT <> 预期影响行数" 之类的判断
     8 --  4、在数据过渡关键节点的地方输出日志
     9 --  5、不要把错误信息吞了
    10 
    11 --  三、示例:
    12 USE agent_config
    13 GO
    14 
    15 -- ① 在外围套个 TRY CATCH 以及事务
    16 BEGIN TRY
    17   BEGIN TRAN;
    18 
    19   -- ② 该过渡执行多次不会产生副作用
    20   UPDATE agent_config.dbo.mt_post_tbl
    21   SET    positionName = '过度数据'
    22   WHERE  positionName = '过度条件';
    23 
    24   -- ③ 因为明确目标预期更新的记录行只有 1 行,所以这里加个“IF @@ROWCOUNT <> 1”的判断,确保数据过渡的准确性
    25   IF @@ROWCOUNT <> 1
    26   BEGIN
    27     -- ④ 在关键节点进行输出日志,输出日志的内容要方便 CTRL + F 定位查找,并表明日志的严重性 info、success、warn、error
    28     PRINT '>> warn:过渡职位名称“过度数据”→“过度条件”失败';
    29     ROLLBACK TRAN;
    30     RETURN;
    31   END;
    32 
    33   COMMIT TRAN;
    34   PRINT CASE WHEN @@TRANCOUNT = 0 THEN '>> success'
    35              ELSE '>> error:@@TRANCOUNT is ' + CAST(@@TRANCOUNT AS VARCHAR(50))
    36         END;
    37 END TRY
    38 BEGIN CATCH
    39   -- ① 捕获错误时回滚事务
    40   -- ⑤ 打印错误信息
    41   ROLLBACK TRAN;
    42   PRINT '>> error:' + ERROR_MESSAGE();
    43 END CATCH;
    Slowly I find myself
  • 相关阅读:
    Case用法
    SQL 常用函数及示例
    ms-SQL 递归调用
    office2003 下载地址 及密码
    [LeetCode] 697. Degree of an Array 数组的度
    [LeetCode] 58. Length of Last Word 求末尾单词的长度
    [LeetCode] 288.Unique Word Abbreviation 独特的单词缩写
    [LeetCode] 287. Find the Duplicate Number 寻找重复数
    [LeetCode] 350. Intersection of Two Arrays II 两个数组相交II
    [LeetCode] 349. Intersection of Two Arrays 两个数组相交
  • 原文地址:https://www.cnblogs.com/SDdemon/p/15568554.html
Copyright © 2011-2022 走看看