Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server - спиране или прекъсване на изпълнението на SQL скрипт

Методът рейзърър

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкнете няколко записа и да получите стойността на самоличността?

  2. Как да предотвратите автоматичното изключване на SQL Server LocalDB?

  3. Visual Studio:ContextSwitchDeadlock

  4. Въведение във вградените функции с таблично стойности (ITVF) в SQL Server

  5. Пагинация в SQL Server с помощта на OFFSET/FETCH