есть ли способ немедленно остановить выполнение SQL-скрипта в SQL server, например, команду" break "или" exit"?
У меня есть скрипт, который выполняет некоторую проверку и поиск, прежде чем он начнет делать вставки, и я хочу, чтобы он остановился, если какая-либо из проверок или поисков не удастся.
18 ответов
The raiserror метод
это завершит соединение, тем самым остановив выполнение остальной части скрипта.
обратите внимание, что как уровень серьезности 20 или выше, так и WITH LOG опция необходима для этого, чтобы работать таким образом.
это даже работает с заявлениями GO, например.
обратите внимание ,что ‘ ho ‘ не напечатанный.
- это работает только в том случае, если вы вошли в систему как администратор (роль "sysadmin"), а также оставляет вас без подключения к базе данных.
- если вы не вошли в систему как администратор, вызов RAISEERROR () завершится ошибкой и скрипт продолжит выполнение.
- при вызове с помощью sqlcmd.exe, будет сообщен код выхода 2745.
метод noexec
другой метод, который работает с операторами GO, – set noexec on . Это приводит к пропуску остальной части сценария. Он не прерывает соединение, но вам нужно включить noexec снова перед тем, как команды будут выполняться.
просто используйте возврат (он будет работать как внутри, так и вне хранимой процедуры).
Если вы можете использовать режим SQLCMD, то заклинание
(включая двоеточие) заставит RAISERROR фактически остановить скрипт. Е. Г.,
и партия остановится. Если режим SQLCMD не включен, вы получите ошибку разбора двоеточия. К сожалению, он не полностью пуленепробиваемый, как если бы скрипт запускался без использования режима SQLCMD, SQL Managment Studio проходит мимо даже ошибок времени разбора! Тем не менее, если вы запускаете их из командной строки, это нормально.
Я бы не использовал raiserror – SQL имеет операторы IF, которые можно использовать для этой цели. Выполните проверку и поиск и установите локальные переменные, затем используйте значение переменных в операторах IF, чтобы сделать вставки условными.
вам не нужно будет проверять результат переменной каждого теста проверки. Обычно вы можете сделать это только с одной переменной флага, чтобы подтвердить все переданные условия:
даже если ваша проверка более сложна, вы должны только нужно несколько переменных флага, чтобы включить в вашу окончательную проверку(ы).
вы можете обернуть инструкцию SQL в цикл WHILE и использовать BREAK, если это необходимо
Я успешно расширил решение noexec on/off транзакцией для запуска скрипта способом "все или ничего".
по-видимому, компилятор "понимает" переменную @finished в IF, даже если произошла ошибка и выполнение было отключено. Однако значение равно 1, только если выполнение не было отключено. Следовательно, я могу красиво зафиксировать или откатить транзакцию соответственно.
в SQL 2012+, Вы можете использовать бросить.
вызывает исключение и передает выполнение в блок CATCH конструкции try. CATCH . Если конструкция TRY . CATCH недоступна, сеанс завершается. Задаются номер строки и процедура, в которой возникает исключение. Тяжесть имеет значение 16.
Это хранимая процедура? Если это так, я думаю, вы можете просто сделать возврат, например "Return NULL";
далее метод refinig Sglasses, приведенные выше строки принудительно использовать режим SQLCMD, и либо treminates scirpt, если не с помощью режима SQLCMD или использует :on error exit для выхода при любой ошибке
функция context_info используется для отслеживания состояния.
Я бы предложил вам обернуть соответствующий блок кода в блок try catch. Затем вы можете использовать событие Raiserror с серьезностью 11, чтобы сломать блок catch, если хотите. Если вы просто хотите raiserrors, но продолжить выполнение в блоке try, используйте более низкую серьезность.
Служба Microsoft SQL Server может быть остановлена с помощью команд net в Microsoft Windows.
![]() |
---|
![]() |
---|
SQL Server 2016 | C:WindowsSysWOW64SQLServerManager13.msc |
SQL Server 2014 | C:WindowsSysWOW64SQLServerManager12.msc |
SQL Server 2012 | C:WindowsSysWOW64SQLServerManager11.msc |
SQL Server 2008 | C:WindowsSysWOW64SQLServerManager10.msc |
Запуск, остановка, приостановка, возобновление или перезапуск экземпляра Компонент SQL Server Database Engine
Запустите диспетчер конфигурации SQL Server с помощью приведенных выше инструкций.
В диалоговом окне Контроль учетных записей нажмите кнопку Да.
На левой панели диспетчера конфигурации SQL Server щелкните Службы SQL Server.
На панели результатов щелкните правой кнопкой мыши SQL Server (MSSQLServer) или именованный экземпляр, затем выберите Пуск, Остановка, Пауза, Продолжить или Перезапуск.
Нажмите кнопку ОК для выхода из диспетчера конфигурации SQL Server .
Примечание |
---|
Примечание |
---|
Примечание |
---|