0

我需要在另一个过程中检查命名事务,以确保它没有被其他任何人执行。

但是对于这个问题,我试图利用一个系统过程

EXEC sp_transactions 'xid','MyTran1'  -- This will return a result if it finds a named transaction called MyTran1

我想知道它是否返回一行... RowsReturned > 1

所以我做了以下

BEGIN TRAN MyTran1  -- named transaction
BEGIN TRAN MyTran2  -- named transaction

如果我运行EXEC sp_transactions2 行返回

如果我运行EXEC sp_transactions 'xid','MyTran1'- 返回一行

现在我需要做类似的事情

DECLARE @nameTranFound int
SET @nameTranFound = EXEC sp_transactions  'xid','MyTran1'

我尝试使用@@RowCount,但它总是返回 1

EXEC sp_transactions 'xid','Warren1'
SELECT @@RowCount
4

1 回答 1

1

虽然您可以为调用创建一个代理表包装器sp_transactions,然后运行select * from <proxy> / select @@rowcount......这对于您想要的东西可能有点过激/矫枉过正。

相反,我建议您查看sp_transactions(提示:它从 中提取事务数据master..systransactions)的源代码,并推出您自己的代码,以提供您想知道的内容。

于 2017-07-14T17:01:32.460 回答