2

SqlContext.Pipe.Send(string str)を使用してSQL / CLRストアドプロシージャからメッセージを送信していますが、メッセージがSSMSにすぐに表示されません。メッセージをSSMSにすぐにフラッシュする方法は?ありがとう!

4

2 に答える 2

1

@RBarryYoungが言っていることを次のように適応させることができます:

SqlConnection sqlCon = new SqlConnection("context connection=true"));
sqlCon.Open();

try {
    SqlCommand sqlCommand = new SqlCommand(String.Format("raiserror('{0}', 0, 0) with nowait", str), sqlCon);
    SqlContext.Pipe.ExecuteAndSend(sqlCommand);
} finally {
    sqlCon.Close();
}

Sendを使用してこれを実行する場合は、バッファーをいっぱいにすることができます。

SqlContext.Pipe.Send(str.PadRight(4000));
SqlContext.Pipe.Send(String.Empty.PadRight(4000));

処理できるメッセージの最大長Send()は4000です。バッファを埋めるには、スペースを含む別の行を送信する必要があります。2行目に4000を使用すると、すでにバッファに何が入っていても、メッセージ全体が確実にフラッシュされます。

2番目の方法の唯一の欠点は、メッセージ間に空白行があり、余分なスペースがたくさんあることです。最初の方法は、より良い出力を生成します。

于 2013-04-05T10:32:04.387 に答える
0

これを行うために私が知っている唯一の方法はRAISERRORWITH NOWAITオプションを使用することです。これにより、保留中のすべてのテキスト出力がすぐにフラッシュされます。これは実際のエラーなどである必要はありません。これは正常に機能します。

RAISERROR(' ',1,1) WITH NOWAIT;
于 2012-11-26T04:26:52.503 に答える