あなたがtransaction
にあなたのストアドプロシージャを実行する場合:
begin tran
exec sp
commit
とクライアントが切断し、それを実行しながら、あなたのSPによって行わ作品全体がロールバックされます。
あなたがいないトランザクションからあなたPROCを呼び出し、1 insert
と他の間のクライアントが接続を切断する場合は、終了しましたinsert
が切断中に実行していたinsert
がロールバックされ、影響を受けません。
REPRO:
create table dbo.table1 (id int);
go
create proc dbo.sp_test
as
--Let's say this insert takes 1 second.
INSERT INTO dbo.table1
VALUES(1)
waitfor delay '00:05:00'
--And this insert takes another second.
INSERT INTO dbo.table1
VALUES (2)
go
--open new query window and write there:
begin tran
exec dbo.sp_test;
commit;
-- wait for some seconds; close this window
-- now check for what was inserted:
select *
from dbo.table1;
---
-- nothing was inserted
--open new query window and write there:
exec dbo.sp_test;
-- wait for some seconds; close this window
-- now check for what was inserted:
select *
from dbo.table1;
---
--1
は、いずれかの手順の最後にCOMMITありますか? – twyly
両方が実行される可能性があります。サーバーから切断しても、SQLサーバーがダウンしてアクセス不能になることはありません。テスト –
としてDBCC Opentranで確認してください。@twylyコミットはなく、ロールバックはありません。 –