3

SQL によって実行されている CLR 関数内から、最初に CLR 関数を呼び出した SQL ステートメントを特定することは可能ですか。直接的な方法がない場合、ある種のハンドル識別子を取得して戻って SQL をクエリする、またはその情報をログに記録するなどの間接的な方法はどうでしょうか?

例:

SQL が実行されます。

select * from genericTable1 join genericCLRfunction() f on genericTable1.col = f.col;

そして、genericCLRfunction() を呼び出す SQL ステートメントによって呼び出される CLR 内で、次のような文字列で終了したいと考えています。

「select * from genericTable1 join genericCLRfunction() f on genericTable1.col = f.col;」

4

1 に答える 1

1

今は実際に試すことはできませんが、可能性はあります。次のようにCLRでセッションIDを取得できます...

using (SqlConnection cn = new SqlConnection("context connection=true;"))
{
   cn.Open();
   SqlCommand cmd = new SqlCommand("SELECT @@SPID", cn);
   int spid = Convert.ToInt32(cmd.ExecuteScalar());
   cn.Close();
}

次に、このSOの質問に対する受け入れられた回答に示されているクエリを使用してみてください...

SQL Server で実行されているクエリを一覧表示する

于 2013-06-17T12:56:13.250 に答える