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。要填充缓冲区,您需要发送另一行带有空格的行。在第二行使用 4000 应该确保它刷新整个消息,无论缓冲区中已经存在什么。

第二种方式的唯一缺点是消息之间有一个空白行,并且有很多额外的空格。第一种方式产生更好的输出。

于 2013-04-05T10:32:04.387 回答
0

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

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