Получить ROWCUNT СИСТЕМНОЙ ПРОЦЕДУРЫ В SYBASE ASE 12.5

Мне нужно проверить именованную транзакцию в другой процедуре, чтобы убедиться, что она не была выполнена кем-либо еще.

Но для этого вопроса я пытаюсь использовать системную процедуру

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_transactions, возвращаются 2 строки

Если я запускаю EXEC sp_transactions 'xid','MyTran1' - возвращается одна строка

Теперь мне нужно сделать что-то вроде

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

Я пытался использовать @@RowCount, но он всегда возвращает 1

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

person Warren LaFrance    schedule 14.07.2017    source источник


Ответы (1)


Хотя вы можете создать оболочку прокси-таблицы для вызова sp_transactions, а затем запустить select * from <proxy> / select @@rowcount ... это, вероятно, немного радикально / излишне для того, что вы хотите.

Вместо этого я предлагаю вам взглянуть на исходный код для sp_transactions (СОВЕТ: он извлекает данные о транзакциях из master..systransactions) и создать свой собственный код, который предоставляет именно то, что вы хотите знать.

person markp-fuso    schedule 14.07.2017
comment
Да, я склонялся к тому, чтобы свернуть свой собственный - просто хотел попытаться избежать этого... :( Это дает мне текст sp: sp_helptext sp_transactions Так что это выполнимо. Если больше ничего не выйдет, я отмечу это как ответ - person Warren LaFrance; 14.07.2017