0

MS SQL で Begin Transaction と commit transaction の間にクエリを挿入すると、クエリの実行を中止または停止するとどうなりますか。ROLLBACKED の実行中に行われたすべての変更は行われますか?

4

3 に答える 3

1

ROLLBACK TRANSACTIONまたはなどを呼び出すまでCOMMIT TRANSACTION、または SQL がなんらかのアクションを実行するまで、トランザクションは開いたままにすることができます。

より詳しい情報:

大規模な更新や修正をテストするときは、実際にこれを利用したいと思っています。次のようなものがあります。

-- BEGIN TRANSACTION
-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION

/*
    A bunch of SQL code here
*/

次に、を強調表示/実行してBEGIN TRANSACTIONから、スクリプト全体を実行できます。結果に満足している場合は、COMMIT TRANSACTION. そうでない場合は、 を実行しROLLBACK TRANSACTIONます。これらの行はコメント アウトされているため、明示的に強調表示して実行しない限り、トランザクション全体に影響を与えることはありません。

于 2013-06-26T14:06:24.123 に答える
0

いいえ。トランザクションは引き続きアクティブです。結局のところ、ロールバックしていませんか? :) この例を実行して、何が起こるか見てみましょう。トランザクション中に中断すると、値 2 がテーブルに表示されますが、ロールバックまたはコミットする必要があります。

select 1 as x into #xxx 
GO


begin transaction

    insert into #xxx(x) select 2
    -- ctrl+break before time runs out.
    waitfor delay '00:00:10'

commit transaction


-- now try this:
select * from #xxx
rollback transaction
select * from #xxx
于 2013-06-26T14:05:57.840 に答える
0

それはあなたのコードに依存します。トランザクションが存在する限り、すべての変更はロールバックまたはコミットが保留されます。

これを見たいと思うかもしれません。

于 2013-06-26T14:04:25.100 に答える