T-SQL UDF で記述されたかなり複雑な式エバリュエーターをデバッグしようとしています (質問しないでください) 。
そしてもちろん、バグがあります。
ここで、PRINT ステートメント (InfoMessage イベントのハンドラーを実装することで ADO.NET から読み取ることができます) を使用して、ストアド プロシージャのトレースをシミュレートできます。
UDF に対して同じことを行うと、コンパイル時に次のメッセージが表示されます。
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
メッセージが表示されます (PRINT はリセットのようなものを行います@@ROWCOUNT
が、これは明らかに UDF では禁止されていますが、呼び出しをトレースするにはどうすればよいでしょうか?デバッガーでの呼び出し...
編集: SQL プロファイラーを使用しようとしましたが (これは私にとって初めてのことでした)、何をトレースするのかわかりません: データベースに送信されたクエリを出力するトレースを取得できますが、それらは呼び出された式-UDF にドリルダウンできないという意味で不透明です。呼び出された実際のストアド プロシージャを追跡できますが、このプロシージャによって呼び出された UDF は一覧表示されません。何か不足していますか?私はそうではないと思います...
編集#2:(自動)受け入れられた回答は関数呼び出しをトレースしますが、非常に役立ちます-ありがとうございます-関数に渡されたパラメーターを見つけるのには役立ちません。もちろん、これは再帰関数のデバッグに不可欠です。解決策が見つかったら投稿します...