gpt4 book ai didi

sql-server-2012 - 我可以在循环中为每次迭代立即打印吗?

转载 作者:行者123 更新时间:2023-12-01 10:50:56 25 4
gpt4 key购买 nike

我的部署服务器为每个新的数据库构建运行一个部署脚本。

部分脚本 block 等待另一个异步操作完成。

阻塞代码如下所示:

DECLARE @i INT = 0;
DECLARE @laststatus NVARCHAR(MAX) = N'';

WHILE @i < 5
BEGIN
-- the real delay is longer
WAITFOR DELAY '00:00:01';

-- poll async operation status here
SET @i = @i + 1;

SET @laststatus = N'status is ' + CAST(@i AS NVARCHAR(MAX));
RAISERROR(@laststatus, 0, 1) WITH NOWAIT;
END;

它使用 RAISERRORWITH NOWAIT 子句而不是 PRINT,因为它应该为每次迭代打印状态更新。

部署服务器使用以下命令在 sqlcmd 中运行脚本:

sqlcmd.exe -i print_test.sql

输出像这样一下子出现:

status is 1
status is 2
status is 3
status is 4
status is 5

它应该在一秒钟后打印:

status is 1

再过一秒钟它应该打印这个

status is 2

等等。

有没有办法在 sqlcmd 中执行此操作?

最佳答案

Is there a way to do this in sqlcmd?

据我所知还没有。

它已经在 Connect 上进行了报道。参见 RAISERROR WITH NOWAIT not honoured in SQLCMD11

SQLCMD was rewritten in SQL 2012 to use ODBC. Here is a small regression error that appears to have sneaked in. If you a script which uses RAISERROR WITH NOWAIT, the output is nevertheless buffered. This works correctly with OSQL and SQLCMD from SQL 2008.

但目前尚未修复。

我想您可以在网络数据包大小(或增加现有消息大小)中添加 SELECT 以刷新缓冲区作为解决方法。

例如

DECLARE @i INT = 0;

WHILE @i < 5
BEGIN
-- poll async operation status here
SET @i = @i + 1;

PRINT 'status is ' + CAST(@i AS VARCHAR(10)) + SPACE(4000);

WAITFOR DELAY '00:00:01';
END;

关于sql-server-2012 - 我可以在循环中为每次迭代立即打印吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20608989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com