2016-04-27 7 views
1

Bitte beachten Sie die DDL unter:commiting äußere Transaktion

create table dbo.Test (id INT) 

create PROCEDURE TestProcedure1 
as 
begin 
    exec TestProcedure2 
    insert into Test values (2) 
end 


create PROCEDURE TestProcedure2 
as 
begin 

begin transaction 
    insert into Test values (2) 
end 

Nun ist diese laufen:

exec TestProcedure1 commit 

der Fehlerausgang unten:

(1 row(s) affected) 
Msg 266, Level 16, State 2, Procedure TestProcedure2, Line 0 
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1. 

(1 row(s) affected) 
Msg 266, Level 16, State 2, Procedure TestProcedure1, Line 0 
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1. 

ich den Grund für den Fehler verstehen Dh es gibt keine Ende-Transaktion in TestProcedure2. Was bedeutet das? Nachdem ich den Fehler sah lief ich die SQL-Anweisung unter:

select * from dbo.Test 

Dies ergab zwei Reihen das heißt die äußere Transaktion die innere Transaktion festgeschrieben. Ich habe zwei Fragen:

1) Does the outer transaction always commit the inner transaction. 
2) After executing the select statement I executed the following commands: 

commit 
commit 

What affect does running two commit statements have in this scenario? 

Antwort