Мой сервер развертывания запускает развертывание script для каждой новой сборки базы данных.
Часть блоков script, чтобы ждать завершения еще одной асинхронной операции.
Код блокировки выглядит следующим образом:
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;
Он использует предложение WITH NOWAIT
RAISERROR
вместо PRINT
, потому что он должен печатать обновление состояния для каждой итерации.
Сервер развертывания запускает script в sqlcmd с помощью этой команды:
sqlcmd.exe -i print_test.sql
Вывод появляется сразу:
статус 1
статус 2
статус 3
статус 4
статус 5
Он должен напечатать это через одну секунду:
статус 1
Через секунду он должен распечатать этот
статус 2
И так далее.
Есть ли способ сделать это в sqlcmd?