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

时间:2012-11-26 03:15:53

标签: c# sql-server sqlclr

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

2 个答案:

答案 0 :(得分: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();
}

如果您想使用发送执行此操作,则可以填充缓冲区:

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

最大消息长度Send()可以处理4000.要填充缓冲区,您需要发送另一行中包含空格的行。对于第二行使用4000应该确保它刷新整个消息,无论缓冲区中已有什么。

第二种方式的唯一缺点是你在消息和许多额外空格之间得到一个空白。第一种方式产生更好的输出。

答案 1 :(得分:0)

我知道这样做的唯一方法是将RAISERRORWITH NOWAIT选项一起使用。这将导致所有挂起的文本输出立即刷新。这不一定是真正的错误或任何事情,这将工作正常:

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