raiserror yöntemi
raiserror('Oh no a fatal error', 20, -1) with log
Bu bağlantıyı sonlandıracak ve betiğin geri kalanının çalışmasını durduracaktır.
WITH LOG
Bu şekilde çalışması için hem şiddet seviyesi 20 veya daha yüksek hem de seçeneğin gerekli olduğunu unutmayın.
Bu, GO ifadeleriyle bile çalışır, örn.
print 'hi'
go
raiserror('Oh no a fatal error', 20, -1) with log
go
print 'ho'
Çıktı verecek:
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' yazılmadığına dikkat edin.
YETERSİZLİKLER:
- Bu yalnızca admin ('sysadmin' rolü) olarak oturum açtıysanız ve sizi veritabanı bağlantısı olmadan bırakırsanız çalışır.
- Yönetici olarak oturum açmadıysanız, RAISEERROR () çağrısının kendisi başarısız olur ve komut dosyası yürütülmeye devam eder .
- Sqlcmd.exe ile çağrıldığında, çıkış kodu 2745 rapor edilecektir.
Referans: http://www.mydatabasesupport.com/forums/ms-sqlserver/174037-sql-server-2000-abort-whole-script.html#post761334
Noexec yöntemi
GO ifadeleriyle çalışan başka bir yöntem set noexec on
. Bu, komut dosyasının geri kalanının atlanmasına neden olur. Bağlantıyı sonlandırmaz, ancak noexec
herhangi bir komut yürütülmeden önce tekrar kapatmanız gerekir .
Misal:
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.