none
CLR触发器会影响原事务吗? RRS feed

  • 问题

  • 使用clr写的触发器,监控某个表A的after update动作,当表发生update后取出部分数据。

    系统中对表A的修改是上层系统执行某个业务的事务中的一步,在测试中发现,如果触发器代码中有sql错误,会直接导致表A修改失败,并且业务的事务回滚。而且前台会报这个错误:

    3991[Microsoft][ODBC SQL Server Driver][SQL Server]在进入用户定义的例程、触发器或聚合 "Triggerxxxxxx" 前处于活动状态的上下文事务在其中已终止,这是不允许的。请更改应用程序逻辑以强制实施严格的事务嵌套。

    请教能否实现触发器内部出错时,不影响原来事务的方法?

    2017年7月26日 4:28

全部回复

  • Hi,

    感谢你在MSDN论坛发帖。

    >>" 并且业务的事务回滚。    不影响原来事务的方法? "

    业务回滚就是影响事务的方法吗?

    据我所知,clr触发器和SQL是集成在一起的,而且触发器是有2种分类, DML Triggers 和 DDL Triggers。

    你使用的是哪种?

    这个DDL Triggers可以阻止任何改变对你的数据框架。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年7月26日 8:32
    版主
  • CLR trgger内部应该添加异常处理

    try

    {

    }

    catch()

    {

    }

    或是在调用CLR trigger的SQL语句块中实现exception handling

    BEGIN TRY -- clr trigger invoke END TRY BEGIN CATCH SELECTERROR_NUMBER() AS ErrorNumber,ERROR_MESSAGE() AS ErrorMessage; END CATCH


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年7月27日 0:15