【问题标题】:T-SQL Output Message During execution in SSMS在 SSMS 中执行期间的 T-SQL 输出消息
【发布时间】:2010-11-20 05:56:26
【问题描述】:

我有一个简单的循环查询,我想在执行期间查看 PRINT 消息。查询是这样的:

WHILE 1 = 1
BEGIN
    WAITFOR DELAY '000:00:10'
    PRINT 'here'
END

在我停止进程之前,PRINT 'here' 不会输出。但是,我想在它运行时看到它。这可能吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以将 RAISERROR 与 serverity 0 和 NOWAIT 选项一起使用

    WHILE 1 = 1
    BEGIN
        WAITFOR DELAY '000:00:10'
        RAISERROR ('here', 0, 1) WITH NOWAIT
    END
    

    【讨论】:

    • 请注意,这在前 500 条消息之后不起作用;一旦你打印的数量超过它,它就会突然开始缓冲!
    • 在 SSMSv 18.1 中对我不起作用。也许事情已经改变了 sinze 2015...
    【解决方案2】:

    我相信打印件会被缓冲,当缓冲区填满时会释放“块”。

    尝试使用 raiserror:

    How do I flush the PRINT buffer in TSQL?

    【讨论】:

      【解决方案3】:

      试试这个..

      DECLARE @i INT = 1
      
      WHILE ( @i <= 10)
      
      BEGIN 
      
      --- do something
      
      SELECT 'Completed  ' + CAST(@i AS VARCHAR(50)) + '  :  ' + CAST(GETDATE() AS VARCHAR(50));
      
      SET @i = @i + 1
      
      END
      

      【讨论】:

      • 你能按照markdown规则格式化你的代码吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多