如果转换失败,则进行T-SQL回滚

问题描述 投票:0回答:1

我们正在整合我们的ERP和CRM。两者都是我们无法更改的第三方应用程序。我们有大约20个表要同步。我们正在使用交易。如果我们的某些转换失败,我们想要回滚并将错误写入我们的日志表。到目前为止,代码超过4000行,贴在pastebin,https://pastebin.com/1XWf1cqy上。下面列出了婚姻状况的一个例子。如果婚姻状况的代码与任何条件都不匹配,那么我们想在我们的日志表中回滚并写入错误。我们是在else语句中编写rollback命令还是我们需要将整个东西嵌套在try catch中?

我正在使用SQL Server 2008 R2。

--UMARSTAT, 
case PC.UMARSTAT --nvarchar(4) map is wrong
   when 'D' then 'DVRC'
   when 'M' then 'MARR'
   when 'O' then 'UNKN'
   when 'S' then 'SNGL'
   when 'U' then 'UNKN'
   when 'W' then 'WDWD'
   when 'X' then 'S'
   else -- we want to rollback and write error in our log table.
end as marital_status, --PC
sql sql-server tsql
1个回答
1
投票

这取决于转换“失败”时的含义。

如果它以产生错误的方式失败,那么您需要在try-catch块中回滚。

但在您的示例代码中,“失败”仅表示未满足某个条件,但不会引发错误。在这种情况下,ELSE是执行回滚或显式引发错误的正确位置,这将导致try-catch块中的回滚。您问题中的代码示例不会导致错误,因此catch块中的任何回滚都不会被执行。

© www.soinside.com 2019 - 2024. All rights reserved.