sql >> Databáze >  >> RDS >> Sqlserver

SQL Server - zastavení nebo přerušení provádění skriptu SQL

Metoda raiserror

raiserror('Oh no a fatal error', 20, -1) with log

Tím se ukončí připojení, čímž se zastaví běh zbytku skriptu.

Všimněte si, že jak úroveň závažnosti 20 nebo vyšší, tak WITH LOG aby to fungovalo tímto způsobem.

To dokonce funguje s příkazy GO, např.

print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'

Poskytne vám výstup:

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.

Všimněte si, že „ho“ není vytištěno.

UPOZORNĚNÍ:

  • Toto funguje pouze v případě, že jste přihlášeni jako správce (role 'sysadmin') a také nemáte žádné připojení k databázi.
  • Pokud NEJSTE přihlášeni jako správce, samotné volání RAISEERROR() se nezdaří a skript bude pokračovat ve vykonávání .
  • Při vyvolání pomocí sqlcmd.exe bude hlášen návratový kód 2745.

Odkaz:http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334

Metoda noexec

Další metodou, která pracuje s příkazy GO, je set noexec on . To způsobí, že zbytek skriptu bude přeskočen. Neukončí to připojení, ale musíte zapnout noexec znovu vypnout před provedením jakýchkoli příkazů.

Příklad:

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. 5 jednoduchých kroků, jak začít s MariaDB a Tableau

  2. 4 způsoby, jak najít řádky, které obsahují malá písmena v Oracle

  3. Z uložené procedury vraťte parametr OUT a kurzor OUT a výsledek analýzy (Oracle)

  4. Oprava chyby „ORA-01790:výraz musí mít stejný datový typ jako odpovídající výraz“