我在生产系统上同时处理了一些不同的事情,我对多任务处理感到困惑。
我想知道已经执行了哪些陈述以及我当前交易中的避风港。 这有可能吗?
请看附图。
我正在运行的脚本如下。 感谢致敬 马塞洛
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表, 所以我想知道我是否犯了这个,插入就在那里。
我在表上找不到任何锁,所以我假设没有锁的事务仍处于活动状态, 但
我真的想知道如何找出交易中未提交的操作。
问候 马塞洛
答案 0 :(得分:1)
在查询窗口中运行以下查询以显示会话持有的所有锁定。这应该可以让您了解待处理的操作。
EXEC sp_lock @@SPID;
答案 1 :(得分:0)
尝试使用@@ TranCount来了解会话中打开的交易数量。