sql - 为什么sql在引发错误后执行语句?
问题描述
我已经写了这段代码。问题是,在引发错误之后,它仍然会在引发错误的地方执行代码。
开始尝试开始交易
Declare @Days int
Set @Days= (Select Days from Days where IsActive=1)
declare @Message varchar(100)
Set @Message= 'The difference between current date and expiry date must be equal or greater than '+ Convert(varchar,@Days)
if(datediff(dd, GETDATE(), convert(date,dbo.Func_Base64Decode(@ExpiryDate))) >= @Days)
Begin
Set @ErrorMsgType= 0
End
Else
Begin
Set @ErrorMsgType= 2
Raiserror(@Message, 16,10);
return
End
//Some insertion code after it.
commit transaction
End Try
在捕获块中:
Begin Catch
if(@ErrorMsgType = 1)
Begin
Raiserror('Opening time cannot be smaller than expiry time', 16,10);
End
Else
Begin
Set @Message= (Select ERROR_MESSAGE())
Raiserror(@Message, 16,10);
End
RollBack Transaction
End Catch
为什么?
解决方案
Return
成功了。在 RAISERROR 之后放置 return 就可以了。
推荐阅读
- c++ - 使 std::fstream 写入文件末尾但从头开始读取
- react-native - 在 React Native 中中止获取请求
- python - psycopg2 使用多个线程或进程处理游标结果
- android - 在文本字段旁边显示图标
- web - 将参数从 Web 应用程序传递到 Unified Service Desk 内的 CRM 案例屏幕
- performance - WhatsApp 如何如此快速地显示讨论?
- magento2 - Magento 2 重新索引过程卡在 Category Products 和 Product Categories
- python - 为什么numpy的转置()结合日期时间
- php - 使用 php,mysql 从数据库中的电子邮件列表发送电子邮件
- project-reactor - 如何在 r2dbc 中加入表?