テーブル内のデータを削除しようとしています
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
ROLLBACK TRAN
しかし、テーブルのデータを確認すると、データは存在します。
テーブル内のデータを削除しようとしています
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
ROLLBACK TRAN
しかし、テーブルのデータを確認すると、データは存在します。
トランザクションをロールバックしている場合は、コミットされていない変更をキャンセルしています。トランザクションを開いて削除し、ロールバックすると、データが存在します。
トランザクションをコミットする (情報を削除する) 場合は、次のようにします。
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
COMMIT TRAN
TRANSACTIONSQLServerでの説明は次のとおりです
トランザクションは単一の作業単位です。トランザクションが成功すると、トランザクション中に行われたすべてのデータ変更がコミットされ、データベースの永続的な部分になります。トランザクションでエラーが発生し、キャンセルまたはロールバックする必要がある場合、すべてのデータ変更が消去されます。
また、使用TRANSACTIONするとテーブルが一時的にロックされるため、注意が必要です。
BEGIN TRAN
Statement1
Statement2
COMMIT TRAN
ステートメントの1つが失敗した場合、または何らかのエラーが発生した場合transaction、rollbackすべてのステートメントが無視され、変更は行われません。
使用する場合は、使用開始以降に行ったROLLBACK TRANデータ変更をすべて消去してください。transactionCOMMIT TRAN
BEGIN TRY
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
END CATCH
トランザクションに複数のアクションがある場合は、常に try-catch ブロックを使用してすべてをロールバックする必要があります。これは、トランザクションの一部が失敗した場合です。
――まとめとして
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
ROLLBACK/COMMIT TRAN
--ROLLBACK: ロールバックという名前で、処理をキャンセルします。
--COMMIT: commit という名前で、プロセスを確認します。
交換
ROLLBACK TRAN
と
COMMIT TRAN
となり、データが削除されます。rollback tranトランザクションで行われたすべての変更をキャンセルすることを意味します。