Ich habe eine Reihe von Dienstprogramm-Prozeduren, die nur auf einige Bedingungen in der Datenbank überprüfen und ein Flag-Ergebnis zurückgeben. Diese Prozeduren werden mit READ UNCOMMITTED Isolationsstufe ausgeführt, die WITH NOLOCK entspricht.Ist es in Ordnung, wenn ich innerhalb einer gespeicherten Prozedur eine andere aufruft, die eine niedrigere Transaktionsisolationsstufe festlegt?
Ich habe auch komplexere Verfahren, die mit SERIALIZABLE Isolationsebene ausgeführt werden. Sie haben auch diese Art von Prüfungen in ihnen.
Also entschied ich mich, diese Prüfverfahren innerhalb dieser komplexen Prozeduren aufzurufen, anstatt den Prüfcode zu replizieren.
Grundsätzlich sieht es wie folgt aus:
CREATE PROCEDURE [dbo].[CheckSomething]
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
-- Do checks
COMMIT TRANSACTION
und
CREATE PROCEDURE [dbo].[DoSomethingImportant]
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
EXECUTE [dbo].[CheckSomething]
-- Do some work
COMMIT TRANSACTION
Wäre es okay, das zu tun? Wird die vorübergehend aktivierte niedrigere Isolationsstufe den Schutz auf höherer Ebene durchbrechen oder ist alles vollkommen sicher?
EDIT: Die Ausführung läuft reibungslos ohne Fehler.
Danke für die Klarstellung, als ich dies in der Vergangenheit tat ich war außerhalb eines gespeicherten Proc, so dass das Verhalten war anders t –