具体的错误:'A' 表
- 不能保留触发器 'ab_insert'。  
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[Microsoft][ODBC SQL Server Driver][SQL Server][OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
[Microsoft][ODBC SQL Server Driver][SQL Server]OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

解决方案 »

  1.   

    帮助说是:ODBC 错误:<0s>。
    生成了 ODBC 错误。可能删除了与某个外键值相关的记录,或者违反了 CHECK 约束。我没有用到过ODBC数据源呀,是直接与SQL SERVER 相连的
      

  2.   

    我是参考邹建的语句:--创建链接服务器
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
    go--创建触发器
    CREATE trigger a_y on dbo.test
    after insert
    AS
       Begin 
         insert srv_lnk.yu.Dbo.b (a_id,b1,b2)  Select id,a1,a2  From a.dbo.test  where id=(select max(id) from a.dbo.test)
       End在添加信息时,出错.
      

  3.   

    yu  是我的另一台服务器的数据库名,B是表名;a 是我的服务器的数据库名;test是表名
      

  4.   

    你的机器和要连接的机器msdtc和强制分布式事务处理都要选,还有看看服务器选项里面的分布式事务协调这个服务起来没有
      

  5.   

    mssql里面有一个服务管理器,里面有4个服务,第一个是distributed transaction coordinator
      

  6.   

    我仅把
    exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
    go中的srv_lnk换成另一台的数据库名,就出现了如下的错误:
    服务器: 消息 7395,级别 16,状态 2,过程 Tr_insert_aTob,行 4
    无法为 OLE DB 提供程序 'SQLOLEDB' 启动嵌套事务。之所以需要嵌套事务是因为 XACT_ABORT 选项已设置为 OFF。
    [OLE/DB provider returned message: 无法在此会话中启动更多的事务。]
    OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionLocal::StartTransaction returned 0x8004d013:  ISOLEVEL=4096]。请高手指点啊
      

  7.   

    我做的过程:aa(a varchar(10),b varchar(10))--sp_addlinkedserver    @server='jsp', @srvproduct='',
                                    @provider='SQLOLEDB', @datasrc='172.16.149.203'
    --sp_addlinkedsrvlogin 'jsp', 'false', NULL, 'sa', null
    select * from jsp.fgb.dbo.aadelete from jsp.fgb.dbo.aa  insert jsp.fgb.Dbo.aa  Select *  From  aa  insert into aa values(4,4)
    我建的触发器:
    CREATE trigger a_y on dbo.aa
    for  insert
    AS
        SET XACT_ABORT  ON
         insert into  jsp.fgb.Dbo.aa  Select a. *  From  lh.fgb.dbo.aa  a
      
    我在jsp.fgb.Dbo.aa  得到的结果a          b          
    ---------- ---------- 
    1          1         
    2          2         
    3          3         
    4          4         
    4          4         (所影响的行数为 5 行)
      

  8.   

    我做的结果如上,
    OLE DB 为事务管理定义了两个可选的接口: ITransactionLocal 支持 OLE DB 数据源中的本地事务。ITransactionJoin 允许提供程序联结包含其它资源管理器的分布式事务
    仅在 XACT_ABORT 选项设置为 ON 时,分布式事务中才允许更新操作。
      

  9.   

    OLE DB 为事务管理定义了两个可选的接口: ITransactionLocal 支持 OLE DB 数据源中的本地事务。ITransactionJoin 允许提供程序联结包含其它资源管理器的分布式事务这些是黑夜的吧?不需要改变吧?
      

  10.   

    这些是黑夜的吧?不需要改变吧?改为"这些是默认的吧?不需要改变吧?"谢谢  lh1979(rocket) 可以插入了,可是在更新的时候;显示错误是:
    数字 名称 'test.test.dbo.c' 包含的前缀数目超过了最大值。最大值为 3。我的更新语句:create trigger tr_wb_z_up on test.dbo.a
       after update
        as 
        begin
          update test.test.dbo.c
          set test.test.dbo.c.c1=inserted.a1,test.test.dbo.c.c2=inserted.a2 from inserted where test.test.dbo.c.id=inserted.id
        end
      

  11.   

    完美解决方案:
    http://blog.csdn.net/gatr/archive/2005/07/08/417587.aspx