现在的问题是执行存储过程的时候会一直在执行,并且这个时候MstCount被锁了--
因为你加了锁了,with (Serializable,  tablockx)

解决方案 »

  1.   

    要是取消的话也要等很长时间,并且就算是存储过程取消了,MstCount这个表还是被锁着,刚才执行存储过程的进程也还存在,用kill也结束不了。
    --with (Serializable ===> with(holdlock...共享锁保留到事务完成,
    所以你的事务没有完成是不会放开锁的
      

  2.   

    Distributed Transaction Coordinator么?这个启动了
      

  3.   

    UP UP UP
    高手们都在忙什么呢
      

  4.   

    是不是分布式事务引起的问题,验证很简单。--在你的本地向链接服务器插入一笔资料BEGIN TRANINSERT INTO [*.*.*.*].DBName.dbo.TableName(...)
    VALUES (....)COMMIT TRAN--若是能成功,就绝对不是分布式事务的问题。
      

  5.   


    检查MSDTC的配置.另
    >>
    你再确认一下,你的正式表是远端服务器上的还是本地的。
      

  6.   


    那问题就更明确了,是MSDTC的问题。
      

  7.   

    但要是用正式表是可以的阿,只是用临时表不可以,这个怎么解释呢。并且我已经把两台机子的msdtc都配置过了
      

  8.   

    回到问题的开始.--这样能否成功?
    create table #a(aa int) 
    GOinsert into #a 
    select * from [*.*.*.*].db.dbo.table begin tran SET @difSCMM = (SELECT Counter FROM dbo.MstCount  WHERE ID = 1) 
    update #a set aa=@difSCMM commit trandrop table #a
      

  9.   

    不把update #a set aa=@difSCMM 这句包在事务内呢?
    --这样能否成功?
    create table #a(aa int) 
    GOinsert into #a 
    select * from [*.*.*.*].db.dbo.table begin tran SET @difSCMM = (SELECT Counter FROM dbo.MstCount  WHERE ID = 1) COMMIT TRANupdate #a set aa=@difSCMM drop table #a
      

  10.   

    update是必须要在事务内的,但我刚才换成临时表又执行了一下,竟然可以了!国庆前还是不可以的。巨汗!!!我再多执行几遍看看
      

  11.   

    知道了,原来在我设置好MSDTC之后有台机子一直没有重启,但国庆放假时关了。刚才我又重试了一下,果然又不行了,原来设置完成后还需要重启一下机子,但还是搞不懂为什么正式表就不需要重启机器呢