SQL Transaction
でGO
のステートメントを複数回使用できますか?私は長いT-SQLスクリプトを持っており、SQL Transaction
で実行したいと思っています。すべてがうまくいくなら、私はそうでなければロールバックすることを約束します。SQL Transactionで 'GO'を複数回使用できますか?
しかし、このクエリを実行しているうちに、'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