感谢回复,添加事务的我也曾试过,还是会报错报错内容:未更新任何行。未提交行N中的数据。错误源:.Net SqlClient Data Provider。错误消息:对象名'我的数据库.dbo.B'无效。触发器体如下begin tran
begin try
insert into 我的数据库.dbo.B()
select *
from A where A.Record_ID = (select Record_ID from inserted)
commit
end try
begin catch
rollback
end catch

解决方案 »

  1.   

    加个commit就可以。给你一个例子:
    create table t1(id int)  
    create table t2(id int)  
    go 
     
      
    create trigger dbo.trigger_t1  
    on t1  
    for insert  
    as  
      
    commit;select 1/ 0  --会报错insert into t2
    select *
    from inserted 
    go  
     
    insert into t1 
    values(100)  
    /*
    消息 8134,级别 16,状态 1,过程 trigger_t1,第 9 行
    遇到以零作除数错误。
    语句已终止。
    */
    go  
    --插入成功
    select *
    from t1
    /*
    id
    100
    */--但是t2表由于:select 1/ 0  报错,导致后面的插入语句没有执行
    select *
    from t2
    /*
    */
      

  2.   


    感谢回复,添加事务的我也曾试过,还是会报错报错内容:未更新任何行。未提交行N中的数据。错误源:.Net SqlClient Data Provider。错误消息:对象名'我的数据库.dbo.B'无效。触发器体如下begin tran
    begin try
    insert into 我的数据库.dbo.B()
    select *
    from A where A.Record_ID = (select Record_ID from inserted)
    commit
    end try
    begin catch
    rollback
    end catch加一个commit就行,然后再插入远程表的数据
      

  3.   

    想要达到的目的是:即使无法添加,修改B表的记录,也要确保A表记录的正常操作
    如果有这样的需求,那就不用触发器,反正你的B表也不实时更新
    定时更新B就可以了
      

  4.   

    你这个要开链接服务器的把:
    insert into 链接服务器名.库名.dbo.b(对应列名)
      

  5.   


    感谢回复,添加事务的我也曾试过,还是会报错报错内容:未更新任何行。未提交行N中的数据。错误源:.Net SqlClient Data Provider。错误消息:对象名'我的数据库.dbo.B'无效。触发器体如下begin tran
    begin try
    insert into 我的数据库.dbo.B()
    select *
    from A where A.Record_ID = (select Record_ID from inserted)
    commit
    end try
    begin catch
    rollback
    end catch加一个commit就行,然后再插入远程表的数据
    十分感觉这楼回复,添加commit的确可以把数据录入到表A
    但是还是有问题,就是还是会抛出报错。这样对客户的还是有影响
      

  6.   

    先检查为什么抛异常,去除异常之后可以考虑去掉try catch
      

  7.   


    感谢回复,添加事务的我也曾试过,还是会报错报错内容:未更新任何行。未提交行N中的数据。错误源:.Net SqlClient Data Provider。错误消息:对象名'我的数据库.dbo.B'无效。触发器体如下begin tran
    begin try
    insert into 我的数据库.dbo.B()
    select *
    from A where A.Record_ID = (select Record_ID from inserted)
    commit
    end try
    begin catch
    rollback
    end catch加一个commit就行,然后再插入远程表的数据
    十分感觉这楼回复,添加commit的确可以把数据录入到表A
    但是还是有问题,就是还是会抛出报错。这样对客户的还是有影响哦 报错后,确实会抛出异常,你的意思是,你不想抛出异常?
      

  8.   


    感谢回复,添加事务的我也曾试过,还是会报错报错内容:未更新任何行。未提交行N中的数据。错误源:.Net SqlClient Data Provider。错误消息:对象名'我的数据库.dbo.B'无效。触发器体如下begin tran
    begin try
    insert into 我的数据库.dbo.B()
    select *
    from A where A.Record_ID = (select Record_ID from inserted)
    commit
    end try
    begin catch
    rollback
    end catch加一个commit就行,然后再插入远程表的数据
    十分感觉这楼回复,添加commit的确可以把数据录入到表A
    但是还是有问题,就是还是会抛出报错。这样对客户的还是有影响哦 报错后,确实会抛出异常,你的意思是,你不想抛出异常?是的,不想抛出异常,我提出这种异常,其严重性级别,是否不能由 Try Catch 处理掉?谢谢
      

  9.   


    感谢回复,添加事务的我也曾试过,还是会报错报错内容:未更新任何行。未提交行N中的数据。错误源:.Net SqlClient Data Provider。错误消息:对象名'我的数据库.dbo.B'无效。触发器体如下begin tran
    begin try
    insert into 我的数据库.dbo.B()
    select *
    from A where A.Record_ID = (select Record_ID from inserted)
    commit
    end try
    begin catch
    rollback
    end catch加一个commit就行,然后再插入远程表的数据
    十分感觉这楼回复,添加commit的确可以把数据录入到表A
    但是还是有问题,就是还是会抛出报错。这样对客户的还是有影响哦 报错后,确实会抛出异常,你的意思是,你不想抛出异常?是的,不想抛出异常,我提出这种异常,其严重性级别,是否不能由 Try Catch 处理掉?谢谢应该是不能被捕获。这种情况只能是在你的插入语句的外面加上begin try,比如:begin tryinsert into 表
    end trybegin catch
    捕获错误
    end catch
      

  10.   

    本来就不该用TRIGGER或实时同步实现喽
      

  11.   

    结贴一下。
    使用触发器实现同步,的确会存在意外。那时候是为了想加工数据。
    最后使用MS-SQL的,复制 - 本地发布 与 本地订阅 实现,数据同步,在自身项目下,再添加触发器进行数据加工。
    感谢各位。特别感谢yupeigu