トランザクションの実装とエラー処理(BEGIN TRANSACTION、COMMIT、ROLLBACK)
SQL ServerのTransact-SQLでトランザクション処理(BEGIN TRANSACTION、COMMIT、ROLLBACK)を実装する方法です。
今、関わっているプロジェクトでTransact-SQLを使ってデータの追加や修正といったことをしないといけなくなったので、メモとして残しておきます。
目次
- コード
- SQLの実行結果
- 参考リンク
コード
トランザクションで処理と、トランザクション中にエラーが発生した場合のROLLBACKの実装はだいたい以下のような感じになります。
DECLARE @a int;
BEGIN TRY
BEGIN TRANSACTION
SET @a = 'a';
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK
SELECT 'エラー ROLLBACK有り' AS result;
END
ELSE
BEGIN
SELECT 'エラー ROLLBACK無し' AS result;
END
END CATCH
上記のSQLは実際にテーブルに対してデータの更新は行っていません。通常は「BEGIN TRANSACTION ~ COMMIT」間にINSERTやUPDATE、DELETEなどの処理を実装します。
SQLの実行結果
上記のSQLを実行した結果は以下の通りです。
result |
---|
エラー ROLLBACK有り |
「BEGIN TRANSACTION ~ COMMIT」外でエラーを発生させるとresultの内容が「エラー ROLLBACK無し」に変わるので、「@@TRANCOUNT」はINSERTやUPDATEを実行したかどうかではなくトランザクションを開始したかどうかのカウントになるようです。