Задача: остановить выполнение сложного sql-запроса. Нормального способа разработчики MS Sql server 2005 не предусмотрели, приходится импровизировать. Первым делом на ум приходит что-то вроде:
RAISERROR ('ЗАЩИТА ОТ СЛУЧАЙНОГО ЗАПУСКА', 16, 1) RETURN
Но данный метод не сработает, если в sql-запросе применяется конструкция go, разбивающая его на независимые пакеты инструкций. В результате длительных изысканий коллективный разум интернета нашел следующую конструкцию:
RAISERROR ('ПРОСТО ОСТАНОВКА, ЧТОБЫ ПРИ СЛУЧАЙНОМ ЗАПУСКЕ SQL НЕ ВЫПОЛНЯЛАСЬ ДАЛЬШЕ', 20, 1) WITH LOG
У нее есть один существенный недостаток, пользователь должен иметь права sysadmin. Но другого выхода пока не найдено. Кроме того, данная команда не просто останавливает выполнение запроса, но и разрывает соединение сервера с клиентом.
select * from #there_is_no_table_that_why_will_be_error_that_stop_query