我使用的数据库是SQL Server 2005。
我为一张表的插入操作添加了一个触发器。当我在C#程序中向表里插入数据时,如果触发器执行过程中出错,如何获取错误信息?如果触发器执行出错,那么所要插入的数据是否会保存到数据库中、还是插入失败?如果将整个插入过程作为一个事务来执行,
那么回滚事务时,触发器所进行的操作是否也能回滚?谁能帮忙回答一下,不甚感激!

解决方案 »

  1.   

    首先我问了一下我一个做了多年SQL数据库的DBA。他说只要把事务写在INSERT的存储过程中,INSERT失败或事务失败,INSERT和事务做的事情都会被撤销。其次,这是ORACLE的触发器引发过程。但我不能确定SQL的触发器原理和ORACLE是一致的。
    (1)如果外部事务撤销,触发器形成的变更是否会撤销?会
    如果触发器操作失败,是否会导致外部SQL失败,从而导致事务撤销会
    (1) 事务回滚时,触发器形成的变更是否会撤销;是
    (2) 触发器失败时,外部SQL是否会返回错误;会
    如果会,则研究如何不返回错,触发器内部进行错误捕获并处理
    如果不会,则研究如何会返回错误;
    (3) 触发器失败时(插入两条记录,前者成功,后者失败),事务回滚时触发器形成的变更是否会撤销;是
    (4) 触发器失败时(插入两条记录,前者成功,后者失败),事务提交时触发器形成的变更是否会撤销;要看你所谓的插入两条记录是分两个语句插入的,还是一个语句插入的. 如果是两个单独的语句插入的, 那么提交时触发器形成的变更不会被撤销;  如果是一个语句插入, 那么你的触发器通是FOR EACH ROW行级触发器,这时在语句返回时因为第二条数据失败, Oracle就会立即撤销前面一条引起的变更, 那么提交时该变更已经不存在了