情况:
我有一个存储过程对A表操作,而A表有插入和更新的触发器:当有插入或更新时,会LinkServer到本地的另一个数据库,以记录插入和更新的日志。问题:
当执行这个存储过程时,却出现错误:
消息 3910,级别 16,状态 2,第 1 行
其他会话正在使用事务的上下文。我查了相关资料,在这儿发现是sql server 2005的一个bug:
http://kbalertz.com/Feedback.aspx?kbNumber=943656
http://kbalertz.com/Feedback.aspx?kbNumber=947486
----------------------------------
50001926 947486  (http://kbalertz.com/Feedback.aspx?kbNumber=947486/ )  
FIX: Error message when you run a stored procedure that references a linked server that is linked to the local server itself in SQL Server 2005: "Transaction context in use by another session" 于是我就更新sql server 2005的sp2:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition') 得出结果:
9.00.3042.00 SP2 Enterprise Edition但还是存在同样的问题,为什么??我不用LinkServer,直接用:数据库.dbo.表是可以的,我问为什么就用LinkServer不行?

解决方案 »

  1.   

    相关的链接:
    http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/2da5983c-2256-4394-82e0-c0c26c663a7e
    http://www.bigdatabaselist.com/wiki/SQL_Server_Version_Builds
    http://support.microsoft.com/kb/321185我也按上面链接开启了MSDTC
      

  2.   

    楼主,可以参考一下这个:
    http://blog.csdn.net/sdhdy/archive/2009/05/25/4215311.aspx
      

  3.   

    feixianxxx:请问,朋友,我能不能请教你一个问题,还是我这个项目的问题。
      

  4.   


    在同一个db server上?
    那为什么还要用link ?如果是在不同的server上,在触发器里用到link,比较讨厌,
    看看下面的处理会不会有帮助
    http://blog.csdn.net/playwarcraft/archive/2009/03/13/3986908.aspx
      

  5.   

    谢谢各位的解答
    继续问:
    1、我在1楼已经说过了,已经启用了MSDTC。
    2、放在触发器里是当时同事考虑省事,对这个表操作就记录日志,要不然得查几百个存储过程,看哪些对此表操作,然后再记录日志,在这我们暂不考虑该不该放在触发器中。
    3、playwarcraft说的在同一个db server上为什么要linkserver,linkserver的配置我们是写到配置表中,然后从配置表中读取出来,我本机的环境是同一台服务器,而正式平台不确定,随时有可能配置到不同服务器
      

  6.   


    弄个test server 专门做test