Frage : Xact_state oder @@ TranCount, zum von Nestverhandlung-Preissenkungen zu behandeln

Hallo haben alle,

I ein Speicher proc, das ein rekursives Speicher proc benennt, das einige der Reihe nach nennen konnte andere. Alle aktualisieren verschiedene Tabellen usw. im System und in allem Anfang mit einer Verhandlung. Ich habe einen Versuchfangblock um den Code und Preissenkung auf Störungen.  Die Wanze, die ich erhielt, war….

The PREISSENKUNG-VERHANDLUNG-Antrag hat kein Entsprechen, von TRANSACTION.

SO ANZUFANGEN, nachdem er ein bisschen mehr auf Verhandlungen gelesen, die ich jetzt sehe, dass, wenn eine Preissenkung um einer genisteten Verhandlung ersucht, sie zurück zu der anderen Verhandlung rollt. Wenn ich die Störung ich verfange, versuchen, sie zurück zu rollen und die Störung zum benennenden Speicher proc an zu werfen. Das benennende Verfahren versucht dann eine Preissenkung, aber es gibt keine. Zu entscheiden, dieses scheine ich zu verstehen und es jetzt bildet sense.

However (die Frage, bevor ich Sie allen bohre), das ich betrachtete Weisen, dieses zu behandeln und nicht weiß, ob man Xact_state oder benutzt @@trancount, um ob zur Preissenkung oder zu not.

So in jedem Fang ich im Begriff war, zu setzen irgendeinen Code wie.

start stor proc
… delcare Som-Material…
BEGIN TRY
ANFANGEN TRANSACTION
… tun etwas stuff
FESTLEGEN TRANS
END TRY
BEGIN CATCH
n        -- nur Preissenkung, wenn dieses das äußere tranaction
WENN ist (XACT_STATE () = -1) UND (@@TranCount = 1)
PREISSENKUNG TRANS

         -- ein Störung string
AUSERWÄHLTES @errorMsg = ein OBJECT_NAME (@@PROCID) errichten + „: „+ geworfen (XACT_STATE () wie varchar (3)) +“ --  @@TranCount =“ + geworfen (@@TranCount als varchar (3))
          --das Störung on
RAISERROR (@errorMsg, @errorSev, @errorState)
ENDEN-FANG
… Enden-Speicher proc

Do werfen, das ich das XACT_STATE benötige oder gerade das @@Trancount benutze.  Auch ich beachtete im Debugger in SQL 2008, dass, wenn ich eine Uhr auf die @@TranCount Variable setzte, die Minute ich das Speicher proc eintrug, das sie erhöht geht und nicht als ich excuted die Aussage… Verhandlung anfangen. Die selben, als ich die Preissenkung… es nannte, verringerten, nur als, dem Speicher proc… keine Ideen lassend oder sind dieses gerade der Debugger oder der SQL-Server, die wissen, dass es eine Verhandlung hat, zum irgendwie zu beginnen??

thanks M

Antwort : Xact_state oder @@ TranCount, zum von Nestverhandlung-Preissenkungen zu behandeln

Weitere Lösungen  
 
programming4us programming4us