C# 如何使SqlContext.Pipe.Send(string str)立即刷新到SSMS?

C# 如何使SqlContext.Pipe.Send(string str)立即刷新到SSMS?,c#,sql-server,sqlclr,C#,Sql Server,Sqlclr,我正在使用SqlContext.Pipe.Send(string str)从SQL/CLR存储过程发送消息,但消息不会立即显示在SSMS中。如何立即将消息刷新到SSMS?谢谢 我知道的唯一方法是使用RAISERROR和with NOWAIT选项。这将导致所有挂起的文本输出立即刷新。这不一定是一个真正的错误或任何东西,这将很好地工作: RAISERROR(' ',1,1) WITH NOWAIT; 您可以这样改编@RBarryYoung的话: SqlConnection sqlCon = new

我正在使用SqlContext.Pipe.Send(string str)从SQL/CLR存储过程发送消息,但消息不会立即显示在SSMS中。如何立即将消息刷新到SSMS?谢谢

我知道的唯一方法是使用
RAISERROR
with NOWAIT
选项。这将导致所有挂起的文本输出立即刷新。这不一定是一个真正的错误或任何东西,这将很好地工作:

RAISERROR(' ',1,1) WITH NOWAIT;

您可以这样改编@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。要填充缓冲区,您需要发送另一行,其中包含空格。第二行使用4000应该可以确保无论缓冲区中已经存在什么,它都会刷新整个消息


第二种方法的唯一缺点是消息之间有一条空行,还有很多额外的空格。第一种方法产生更好的输出。

此方法可用于T-SQL存储过程,但不能用于CLR存储过程。但是谢谢你!