Kontrollstrukturen
Anweisungsblock
Begin
{T-SQL Anweisung | anweisungsblock}
EndIF ... Then
IF boolscher_Ausdruck
T-SQL Anweisung | anweisungsblock
[ELSE T-SQL Anweisung | anweisungsblock ]case
CASE eingabeausdruck
when fall1 then ergebnisausdruck1
[{when fallN then ergebnisausdruckN}]
[ELSE else_ergebnisausdruck]
ENDwhile
while Boolscher_ausdruck
T-SQL Anweisung | anweisungsblockMittels der Anweisung break kann die While- Schleife vorzeitig beendet werden. Durch continue kann die Abarbeitung des Schleifenblocks vorzeitig beendet werden, und der nächste Schleifenzyklus wird eingeläutet.
Fehlerbehandlung
Jeder Ausnahme- bzw. fehlerhafte Zustand ist eine Fehlernummer zugeordnet. Neben den Fehlernummern gibt es noch einen sog. Schweregrad. Es handelt sich hierbei um eine Klassifizierung der Fehler.
|
Schweregrade |
Beschreibung |
|---|---|
|
1 bis 10 |
Statusmeldungen / Informationen |
|
11 bis 16 |
Benutzerdefinierte Fehlermeldungen |
|
17 bis 25 |
Hard und Softwarefehler |
Tritt bei einer T-SQL Anweisung ein Fehler auf, dann wird in der Systemvariabel @@ERROR eine Fehlernummer eingertragen. @@ERROR ist vom Typ Integer.
create proc del_artikel @artnr char[6]
as
delete from artikel where atrikelnr = @artnr
if @@error <> 0
return -1
else
return 0
goBenutzerdefinierte Fehler
Mittels der Anweisung RAISERROR kann ein benutzerdefinierter Fehler generiert werden. Die Fehlernummer sollte dabei stets größer 50000 sein, und der Schweregrad zwischen 11 und 18. Systemadministratoren können mittels RAISERROR darüber hinaus auch Fehler mit Schweregraden zwischen 19 und 25 generieren.
RAISERROR (<Fehlermeldung> | <Fehlernummer>, <Schweregrad>, <Status>)
Status ist eine beliebige Zahl zw. 1 und 127.
Soll die Fehlermeldung in das Windows- Ereignisprotokoll geschrieben werden um z.B. mittels der SQL- Server Agent Warnungen diese auszuwerten, dann muß die Option With Log an RAISERROR angehangen werden:
RAISERROR (<Fehlermeldung> | <Fehlernummer>, <Schweregrad>, <Status>) WITH LOG
try.. catch Blöcke
Analog in höheren Programmiersprachen kann ab SQL Server 2005 die Fehlerbehandlung über Try- Catch Blöcke abgewickelt werden. Achtung: Status und Infomeldungen führen zu keiner Verzweigung in den catch- block.
begin try
RAISERROR ('ich bin ein selbstdefinierter Fehler', 15, 2) WITH LOG
print('nach Raiseerror')
end try
begin catch
print( 'aus catch')
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage
print ERROR_MESSAGE()
end catch