我们正在整合我们的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
答案 0 :(得分:1)
这取决于转换失败时的含义"。
如果它以产生错误的方式失败,那么你需要在try-catch块中回滚。
但在您的示例代码中,"失败"只是意味着某个条件没有得到满足,但没有出现错误。在这种情况下,ELSE是执行回滚或显式引发错误的正确位置,这将导致try-catch块中的回滚。您问题中的代码示例不会导致错误,因此catch
块中的任何回滚都不会被执行。