如何找出事务中未提交的操作

时间:2014-09-02 10:23:49

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2 sql-server-2012

我在生产系统上同时处理了一些不同的事情,我对多任务处理感到困惑。

我想知道已经执行了哪些陈述以及我当前交易中的避风港。 这有可能吗?

请看附图。

我正在运行的脚本如下。 感谢致敬 马塞洛

the message I get when closing the windonw

USE Bocss2

BEGIN TRANSACTION
--Get order items

select @@trancount

SELECT  o.strBxOrderNo ,
    sintOrderStatusID ,
    sintOrderSeqNo
INTO    #t1
FROM    dbo.tblBOrder o
    JOIN dbo.tblBOrderItem oi ON o.strBxOrderNo = oi.strBxOrderNo
    JOIN dbo.tblProdName pn ON oi.strItemNo = pn.strItemNo
WHERE   strTier1 = 'ar636'
    AND sdtmOrderItemStatusUpdated = '31-aug-2014 02:01:00'
    AND sintOrderItemStatusId = 9


--(1063 row(s) affected)
--get order history records

SELECT  oh.*
INTO    #t2
FROM    dbo.tblBOrderHistory oh
    JOIN ( SELECT   MAX(dtmAdded) dtmAdded ,
                    strBxOrderNo
           FROM     dbo.tblBOrderHistory
           WHERE    strBxOrderNo IN ( SELECT    strBxOrderNo
                                      FROM      #t1 )
                    AND sintOrderStatusId <> 8
           GROUP BY strBxOrderNo
         ) oh2 ON oh.strBxOrderNo = oh2.strBxOrderNo
                  AND oh.dtmAdded = oh2.dtmAdded

--(929 row(s) affected)
--Perform fix

select o.* into tablebackups.dbo._MM_20140901_tblBOrder
FROM    dbo.tblBOrder o
    JOIN #t2 ON o.strBxOrderNo = #t2.strBxOrderNo
--(929 row(s) affected)



UPDATE  o
SET     sintOrderStatusID = #t2.sintOrderStatusID
FROM    dbo.tblBOrder o
    JOIN #t2 ON o.strBxOrderNo = #t2.strBxOrderNo



INSERT  INTO dbo.tblBOrderHistory
    ( strBxOrderNo ,
      sintOrderStatusId ,
      dtmAdded ,
      lngUserId ,
      lngOrderFileId 
    )
    SELECT  strBxOrderNo ,
            sintOrderStatusId ,
            GETDATE() ,
            3277 ,
            lngOrderFileId
    FROM    #t2


select oi.* into tablebackups.dbo._MM_20140901_tblBOrderItem
FROM    dbo.tblBOrderItem oi
    JOIN #t1 ON oi.strBxOrderNo = #t1.strBxOrderNo
                AND oi.sintOrderSeqNo = #t1.sintOrderSeqNo


UPDATE  oi
SET     sintOrderItemStatusId = 3 ,
    sdtmOrderItemStatusUpdated = GETDATE()
FROM    dbo.tblBOrderItem oi
    JOIN #t1 ON oi.strBxOrderNo = #t1.strBxOrderNo
                AND oi.sintOrderSeqNo = #t1.sintOrderSeqNo

--1063

我不能只是在这个场合回滚整个事情,因为,正如我所说,我对多任务处理感到困惑,我在不同的窗口上运行了所有这些更新。

唯一的问题是插件还没有完成,我可以重新生成#t1和#t2表, 所以我想知道我是否犯了这个,插入就在那里。

我在表上找不到任何锁,所以我假设没有锁的事务仍处于活动状态, 但

我真的想知道如何找出交易中未提交的操作。

问候 马塞洛

2 个答案:

答案 0 :(得分:1)

在查询窗口中运行以下查询以显示会话持有的所有锁定。这应该可以让您了解待处理的操作。

EXEC sp_lock @@SPID; 

答案 1 :(得分:0)

尝试使用@@ TranCount来了解会话中打开的交易数量。