Ausgabeparameter für gespeicherte Prozeduren in SQL Server Profiler

8

Ich habe eine gespeicherte Prozedur mit einem int Ausgabeparameter. Wenn ich SQL Server Profiler ausführen, die gespeicherte Prozedur über einen beliebigen .Net-Code ausführen und das Ereignis RPC: Completed erfassen, sieht die TextData wie folgt aus:

%Vor%

Warum sieht es so aus, als ob es den Wert des Ausgabeparameters vor Ausführung der gespeicherten Prozedur erhält?

    
Graham Clark 04.02.2010, 09:57
quelle

2 Antworten

5

Die Ereignisklasse RPC: Completed gibt an, dass ein Remoteprozeduraufruf abgeschlossen wurde. Daher ist der Ausgabeparameter an diesem Punkt tatsächlich bekannt. Sehen Sie, ob das Tracing des RPC: Started Ihnen zeigt, was Sie erwarten.

    
edosoft 04.02.2010, 12:04
quelle
4

Das ist, egal wie man es betrachtet, ein Fehler. Die Absicht des SQL Profiler "TextData" besteht darin, es jemandem zu ermöglichen, den Aufruf der gespeicherten Prozedur zu verstehen und zu wiederholen. In diesem Fall kann das Ausführen dieses T-SQL Ihnen ein völlig anderes Ergebnis liefern, wenn die spStoredProcedure -Prozedur eine Logik hat, die vom Eingabewert des Parameters @OutParam abhängt, wobei dieser Wert von " 13 "waren irgendwie sinnvoll als Eingabewert.

Es ist leicht zu sehen, wie es bequem sein kann (ermöglicht Ihnen, die Ausgabewerte des proc-Aufrufs zu sehen, die sonst mit dem Ereignis "RPC-Ausgabeparameter" zu tun hätten), aber es ist effektiv eine "Lüge" als zu welchem ​​T-SQL-Äquivalent wurde ausgeführt.

VERBUNDEN: Ich bin gerade auf einen Artikel des Kundendienstes von Microsoft gestoßen - über einen weiteren Fall, bei dem die Konvertierung der binären Daten des RPC: Completed-Ereignisses in einen darstellbaren TextData-Wert zu einer ungenauen Reproduktion des ursprünglichen RPC-Aufrufs führt Codepage-Probleme:
Ссылка

AKTUALISIERT: Durch das Experimentieren mit diesem fand ich eine andere Besonderheit des Verhaltens - der Profiler wird nur dieses falsche Anfangs-SET verwenden, wenn der Eingabewert für diesen Parameter in dem RPC-Aufruf Null war. Wenn ein Wert ungleich Null angegeben wurde (und der Parameter in .Net SqlClient die Anweisung "InputOutput" hatte), enthält dieser anfängliche SET den wahren Eingabewert und nicht den resultierenden Ausgabewert. Wenn die Eingabe jedoch null war, wird stattdessen der Ausgabewert festgelegt. Diese Beobachtung unterstützt die Vorstellung, dass es sich bei der Profiler-RPC-zu-TSQL-Anzeigekonvertierung einfach um einen Null-Bearbeitungsfehler handelt.

    
Tao 23.01.2014 12:56
quelle