1. ホーム
  2. データベース
  3. エムエスエル

SQL SERVERのコミット・トランザクションのロールバック機構

2022-01-05 13:01:22

1. ロールバック文 1.

xact_abort をオフに設定する

TRANを開始する

INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /**//* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)

COMMIT TRAN

行く

<スパン   結果1:エラー行のみロールバックされ、ステートメントは継続して実行されます。

-select * from score

101 90

102 78

103 81

104 65

2. ロールバック文 2.

XACT_ABORTをオンに設定する

BEGIN TRAN

INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /**//* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)

COMMIT TRAN

行く

結果2:トランザクションは終了し、全体がロールバックされ、結果はNULLである。

-select * from score

3. ロールバック文 3.

エラー行でトランザクションが終了、エラー行でロールバック、エラー行の前にロールバックなし

XACT_ABORTをオンに設定する

ビギン

INSERT INTO score VALUES (101,90)

INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /**//* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)

終了

行く

  結果3: システムが各挿入文を個別のトランザクションとして扱うため、エラー行の前のものはロールバックされないため、この現象が発生します。

-select * from score

101 90

102 78

<リンク