webentwicklung-frage-antwort-db.com.de

SQL Server: Transaktion gespeicherter Prozeduren

Hallo, ich habe einige gespeicherte Prozeduren erhalten, um Produkte und anderes auf meiner Website zu erstellen. Jetzt muss ich einige davon in einer Transaktion ausführen. Ist das möglich oder muss ich nur für die Transaktion eine gespeicherte Prozedur erstellen?

Kann ich sowas sagen?

BEGIN TRAN
"1. stored procedure"
"2. stored procedure"
COMMIT
19
saadan

Um zu den anderen Antworten oben hinzuzufügen, möchten Sie möglicherweise einige Fehlerbehandlung hinzufügen:

BEGIN TRAN

BEGIN TRY

   EXEC P1

   EXEC P2

   COMMIT TRAN

END TRY
BEGIN CATCH

  ROLLBACK TRAN

END CATCH

Update mit C # -Code (Ich persönlich finde es viel einfacher, Transcode außerhalb der Sprocs und in der Datenschicht zu halten - erleichtert das Erstellen gespeicherter Prozeduren später)

using (var conn = new SqlConnection(...))

    trans = conn.BeginTransaction();

    try
   {
       ...call P1 using transaction
       ...call P2 using transaction

       trans.Commit();
   }
   catch
   {
       trans.RollBack();
       throw;
   }
}
40
Paddy

Ja, eine gespeicherte Prozedur kann innerhalb einer Transaktion ausgeführt werden. Nachfolgend finden Sie eine Beispielanfrage.

create table temp1
(
    id int,
    name varchar(20)
)

create table temp2
(
    id int,
    name varchar(20)
)
go

create proc p1 as
insert temp1 values (1, 'test1')


create proc p2 as 
insert temp2 values (1, 'test2')
go  

begin tran tx
exec p1
exec p2
commit
3
aravind

In SQL Server (nicht sicher über andere RDBMS) können Sie mehrere gespeicherte Prozeduren in einer Transaktion aufrufen.

BEGIN TRAN
EXEC StoredProc1
EXEC StoredProc2
COMMIT TRAN

Sie können der gespeicherten Prozedur einen Rückkehrcode hinzufügen, um zu prüfen, ob die gespeicherte Prozedur 2 ausgeführt werden soll, falls die gespeicherte Prozedur 1 fehlgeschlagen ist

BEARBEITEN: Um einen Rückkehrcode zu überprüfen, können Sie Folgendes tun. Dadurch wird die erste gespeicherte Prozedur ausgeführt. Wenn es 0 zurückgibt, läuft es die 2.. Wenn der 2. Wert 0 ergibt, wird die Transaktion festgeschrieben. Wenn keiner von 0 zurückgegeben wird, wird die Transaktion rückgängig gemacht

DECLARE @ReturnValue INT
BEGIN TRAN
  EXEC @ReturnValue = StoredProc1
  IF @ReturnValue = 0
  BEGIN
    EXEC @ReturnValue = StoredProc2
    IF @ReturnValue = 0
    BEGIN
      COMMIT
    END
    ELSE
    BEGIN
      ROLLBACK
    END
  END
  ELSE
  BEGIN
    ROLLBACK
  END
2
Greg
Begin TRAN
BEGIN TRY
  -- your Action
  Commit TRAN
END TRY
BEGIN CATCH
  IF @@TRANCOUNT > 0
  BEGIN
    ROLLBACK TRAN
  END 
END CATCH
0
fstephenster