Можем ли мы использовать инструкцию GO
несколько раз в SQL Transaction
. У меня длинный сценарий T-SQL, и я хочу запустить его в SQL Transaction
. Если все пойдет хорошо, то я сделаю иначе, откат.Можем ли мы использовать «GO» несколько раз в транзакции SQL?
Но, выполняя этот запрос, я получил ошибку, например 'create function must be the only statement in the batch'
. Поскольку я создаю и отбрасываю много функций и процедур в этом.
Я не использовал GO
в любом месте сценария. Мой вопрос в том, что: могу ли я использовать несколько раз GO
в этом длинном сценарии. Потому что GO
создает партию, и если пакет запускается успешно в первый раз, но сбой в следующий раз, то оператор rollback transaction
сможет выполнить фактический откат, который был выполнен?
Структура моего сценария выглядит следующим образом:
PRINT 'Transaction Started'
BEGIN TRY
BEGIN TRAN
Drop Function
....
....
Create Function
....
....
Drop Procedure
....
....
Lots of statements
....
....
COMMIT TRAN
PRINT 'Transaction Succeeded'
END TRY
BEGIN CATCH
PRINT 'Transaction Failed'
IF(@@TRANCOUNT > 0)
ROLLBACK TRAN
END CATCH
Я создаю этот сценарий, чтобы перенести некоторые изменения из NEWDB в oldDB в одном сценарии.
Вы создаете хранимую процедуру или функцию в этом сценарии? – Dane
Я обновил свой ответ. В любом случае .. Я создаю и отбрасываю оба. Сначала проверьте, существуют они или нет. –
Попробуйте этот ответ здесь: http://stackoverflow.com/a/11121382/249813 – JamesT