Hallo,
ich habe ein paar Fragen zu Transaktionen beim SQL Server im Zusammenhang mit Stored Procedures und im Vergleich mit dem Interbase Server:
Beim SQL-Server wird oft empfohlen, dass man mit BEGIN/END TRY..BEGIN/END CATCH Blöcken arbeitet. Wenn man dies _nicht_ tut (so habe ich den Eindruck), wird eine Prozedur nicht automatisch bei einem Fehlen (z.B. Verletzung eines Contraints) abgebrochen und die Änderungen zurückgenommen, sondern es geht einfach weiter mit dem nächsten Statement der Proc. Wenn man aber mit TRY..CATCH arbeitet, wird bei einem solchen Fehler immer der CATCH Block angesprungen. Stimmt die Beobachtung so weit?
Häufig sieht man Beispiele, in denen innerhalb einer Stored Proc eine Transaktionen gestartet wird (BEGIN TRANSACTION) und diese ggf. mit ROLLBACK (im CATCH Block) zurückgenommen wird. Wie verhält es sicht, wenn der aufrufende Client seinerseits den Prozeduraufruf in eine Transaktion einbettet? Werden die Transkationen innerhalb und außerhalb der Proc dann automatisch geschachtelt?
Bei Interbase hat jeder Datenbankzugruff einen Transaktionskontext, entweder implizit oder explizit. Der Transaktionskontext steuert zudem die Isolation und andere Parameter. Ist dies prinzipiell beim SQL Server auch so?
Vielen Dank für Euro Zeit
KS
ich habe ein paar Fragen zu Transaktionen beim SQL Server im Zusammenhang mit Stored Procedures und im Vergleich mit dem Interbase Server:
Beim SQL-Server wird oft empfohlen, dass man mit BEGIN/END TRY..BEGIN/END CATCH Blöcken arbeitet. Wenn man dies _nicht_ tut (so habe ich den Eindruck), wird eine Prozedur nicht automatisch bei einem Fehlen (z.B. Verletzung eines Contraints) abgebrochen und die Änderungen zurückgenommen, sondern es geht einfach weiter mit dem nächsten Statement der Proc. Wenn man aber mit TRY..CATCH arbeitet, wird bei einem solchen Fehler immer der CATCH Block angesprungen. Stimmt die Beobachtung so weit?
Häufig sieht man Beispiele, in denen innerhalb einer Stored Proc eine Transaktionen gestartet wird (BEGIN TRANSACTION) und diese ggf. mit ROLLBACK (im CATCH Block) zurückgenommen wird. Wie verhält es sicht, wenn der aufrufende Client seinerseits den Prozeduraufruf in eine Transaktion einbettet? Werden die Transkationen innerhalb und außerhalb der Proc dann automatisch geschachtelt?
Bei Interbase hat jeder Datenbankzugruff einen Transaktionskontext, entweder implizit oder explizit. Der Transaktionskontext steuert zudem die Isolation und andere Parameter. Ist dies prinzipiell beim SQL Server auch so?
Vielen Dank für Euro Zeit
KS
Comment