Методът рейзърър
raiserror('Oh no a fatal error', 20, -1) with log
Това ще прекрати връзката, като по този начин ще спре изпълнението на останалата част от скрипта.
Имайте предвид, че както ниво на сериозност 20 или по-високо, така и WITH LOG
са необходими опции, за да работи по този начин.
Това работи дори с GO оператори, напр.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Ще ви даде резултата:
hi
Msg 2745, Level 16, State 2, Line 1
Process ID 51 has raised user error 50000, severity 20. SQL Server is terminating this process.
Msg 50000, Level 20, State 1, Line 1
Oh no a fatal error
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Забележете, че 'ho' не се отпечатва.
ПРЕДУПРЕЖДЕНИЯ:
- Това работи само ако сте влезли като администратор (роля „сисадмин“) и също така ви оставя без връзка с базата данни.
- Ако НЕ сте влезли като администратор, самото извикване RAISEERROR() ще се провали и скриптът ще продължи да се изпълнява .
- Когато бъде извикан с sqlcmd.exe, ще бъде докладван код за излизане 2745.
Справка:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Методът noexec
Друг метод, който работи с GO оператори, е set noexec on
. Това води до пропускане на останалата част от скрипта. Това не прекратява връзката, но трябва да включите noexec
изключете отново, преди да се изпълнят каквито и да е команди.
Пример:
print 'hi'
go
print 'Fatal error, script will not continue!'
set noexec on
print 'ho'
go
-- last line of the script
set noexec off -- Turn execution back on; only needed in SSMS, so as to be able
-- to run this script again in the same session.