Откат моего хранимой процедуры будет достаточно далеко? - PullRequest
2 голосов
/ 05 августа 2011

Я работаю с базой данных SQL Server 2008 через php с подключением odbc.

Я читаю файлы данных и записываю их в базу данных, но из-за различий в размерах / разметке файлов мой sql несколько автоматическигенерироваться.

sql вызывается в следующем порядке:

set autocommit to off
execute some sql 
execute more sql 
execute a SP.
commit

в моей хранимой процедуре я хочу обработать ошибку с помощью try catch, например:

BEGIN try
    --sql
END try
BEGIN catch
    rollback
END catch

Iмне интересно, будет ли это откатывать только sp и оставить мой другой sql для фиксации или он вернется к точке, где autocommit был выключен?

другое возможное решение будет возвращать false / true изхранимую процедуру и используйте ее для вызова отката с php.Это возможно?если так, как можно вернуть значение с помощью хранимой процедуры?

Ответы [ 2 ]

1 голос
/ 05 августа 2011

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

Например, используя то, что вы предоставили:

DECLARE @success bit
BEGIN TRAN T1

    BEGIN try
        EXEC [dbo].[usp_MyProc]
        SET @success = 1
        PRINT 'SUCCESS'
    END try
    BEGIN catch
        SET @success = 0
        PRINT 'FAIL'
    END catch

    IF @success = 1
        BEGIN
            COMMIT TRAN T1
        END
    ELSE
        BEGIN
            ROLLBACK TRAN T1
        END
PRINT @@TRANCOUNT

должно заканчиваться наTRANCOUNT из 0 в обоих случаях.

0 голосов
/ 05 августа 2011

Вы просматриваете вложенные транзакции.

Смотрите эту тему: слишком много, чтобы скопировать / вставить извините

Вложенные хранимые процедуры, содержащие шаблон TRY CATCH ROLLBACK?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...