Ich versuche, ein ziemlich kompliziertes Formel-Evaluator in T-SQL-UDFs geschrieben (nicht fragen), dass rekursiv (aber indirekt über eine Zwischenfunktion) sich selbst nennt, blah , Blah.Wie T-SQL-Funktionsaufrufe zu verfolgen
Und natürlich haben wir einen Fehler.
Mit PRINT-Anweisungen (die dann von ADO.NET gelesen werden können, indem ein Handler für das InfoMessage-Ereignis implementiert wird) kann ich eine Ablaufverfolgung für gespeicherte Prozeduren simulieren.
das gleiche für UDF Ergebnisse in einer Kompilierung Nachricht Doing:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
bekomme ich die Meldung (PRINT hat einige Sachen wie @@ROWCOUNT
Zurücksetzen die definitly ist ein no-no in SEF, aber wie kann ich Spur durch die Aufrufe? Ich möchte diese Trace ausgedruckt haben, so dass ich es studieren kann, ohne abgelenkt zu werden durch die Aufrufe im Debugger ...
EDIT: Ich habe versucht, den SQL Profiler (this war ein erstes Mal für mich), aber ich kann nicht herausfinden, wofür ich nachzeichnen soll: Alt Obwohl ich den Trace dazu bringen kann, die an die Datenbank gesendeten Abfragen auszugeben, sind sie in dem Sinne undurchsichtig, dass ich nicht zu den aufgerufenen Expression-UDFs gehen kann: Ich kann die aufgerufenen Stored Procedures verfolgen, aber die so aufgerufenen UDFs Verfahren sind nicht aufgeführt. Fehle ich etwas? Ich denke nicht ...
EDIT # 2: Allthough die (Auto-) akzeptierte Antwort tut verfolgen die Funktion aufruft - sehr hilfreich, Dank - es ist nicht herauszufinden, hilft, welche Parameter waren auf den übergebenen Funktion. Dies ist natürlich in Debugging rekursive Funktionen erforderlich. Ich werde posten, wenn ich irgendeine Lösung überhaupt finde ...
Ja, schauen Sie sich die Antwort von Matthieu unten an, in der erläutert wird, welche Ereignisse Sie in Ihrem Profiler-Setup hinzufügen müssen. In der Standardeinstellung werden nur einige Ereignisse erfasst, die für die Fehlerbehebung nicht erforderlich sind. –