официальный партнёр 1С по деловому софту
Закрыть
Логин:
Пароль:
Забыли свой пароль?
  Войти
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
 
8(495)229-30-42

SQL. RAISEERROR вместо PRINT при выводе сообщений о статусе выполнения

При выполнении длинных скриптов в MSSQL-студии хочется наблюдать статус. Куда дошло, что происходит в данный момент, сколько осталось?
Для этого можно использовать оператор PRINT
Но у него есть одна крайне неприятная особенность. Выводит текст только когда уже скрипт выполнен. Частный случай: при выполнении команды GO, что по сути - то же самое.
То есть чтобы сразу увидеть текст - можно после PRINT вставить GO, и мгновенно увидим сообщение.
Но минус данного финта состоит в том, что при выполнении GO мы какбы намекает SQL что предыдущая часть скрипта уже отработала полностью, и он удаляет все перемененные, определённые через DECLARE, а это в некоторых случаях заставляет пренебречь выводом сообщений в пользу сохранения работоспособности скрипта.

Но выход есть, конструкция RAISERROR (и не спрашивайте, где еще одна Е :) )
С флагом WITH NOWAIT
Чуть сложней использовать из-за того, что текст сообщения нельзя собирать динамически при передаче в метод, но в целом даёт нужный результат

Подробней здесь
https://www.sqltheater.com/2017/09/12/stop-using-print/