În instrucțiunile online pentru script-ul care creează TSQLTutorJoins bază de date eșantion de meu de mai devreme coloane, vă recomandăm să folosiți osql.exe pentru a rula scriptul din promptul de comandă. Pentru a demonstra de ce, mă bazez în această lună coloana pe RAISERROR și un truc misto am învățat despre utilizarea RAISERROR declarație de stat parametru. Folosind o valoare specială pentru parametrul RAISERROR state, puteți forța terminarea unui script complex și puteți împiedica executarea acestuia în baza de date greșită.,RAISERROR are trei componente principale: textul de eroare, severitatea și starea. Textul de eroare poate fi fie un mesaj codat sau parametrizat, fie un număr de eroare dintr-un mesaj definit de utilizator permanent. Pentru a crea propriile mesaje permanente, consultați SQL Server Books Online (BOL) despre modul de utilizare a procedurii stocate în sistem sp_addmessage.
severitatea are mai multe niveluri definite. Erorile definite de dezvoltator variază în severitate de la 1 la 16, 16 fiind cele mai frecvente și implicit. Cu toate acestea, nu toate severitățile funcționează în același mod., Tabelul 1 prezintă categoriile de severitate, modul în care afișează mesajele în Query Analyzer și modul în care sunt conectate opțional în Jurnalul de aplicații al vizualizatorului de evenimente. Pentru a vă conecta mesaje de la Event Viewer, puteți folosi CU LOG în RAISERROR declarație sau de a crea mesajul permanent prin utilizarea sp_addmessage cu with_log parametru setat la „TRUE”. Această din urmă alegere va scrie fiecare apariție a acestei erori în Jurnalul de aplicații al vizualizatorului de evenimente, chiar dacă RAISERROR nu specifică cu jurnalul., Simplificat RAISERROR sintaxa este
RAISERROR (error, severity, state) WITH LOG
De exemplu,
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
a se întoarce următoarea eroare la fereastra cu mesaje în Query Analyzer:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
prima linie este Eroarea Numărul Info, ca în Tabelul 1 descrie. Query Analyzer nu afișează aceste informații pentru severitatea 10. Culoarea afișajului se schimbă de la negru pentru severitățile de la 1 la 9 la roșu pentru 11 și mai mari. Script-ul exemplu în listarea 1 prezinta sintaxa suplimentare și idei pentru utilizarea RAISERROR, inclusiv folosind mai multe limbi și parametrizare., Pentru mai multe informații despre utilizarea RAISERROR și diferite grade de severitate, a se vedea BOL sub următoarele subiecte: Mesaje de Eroare, Mesajul de Eroare Niveluri de Severitate, RAISERROR, Folosind RAISERROR, FORMATMESSAGE, și xp_logevent.în plus față de severitate, RAISERROR acceptă, de asemenea, o stare. Multe scripturi de creare a obiectelor creează o bază de date și apoi tabele, proceduri și așa mai departe în baza de date nou creată. Dar dacă scriptul nu a creat corect baza de date? Toate obiectele suplimentare (de ex.,, tabele, proceduri) vor fi create în baza de date implicită, care pentru administratorii de sisteme ar putea fi master. Crearea tuturor obiectelor bazei de date definite de utilizator în baza de date principală este exact ceea ce nu doriți, așa că atunci când scriptați un proces automat, puteți include o valoare pentru starea care termină scriptul dacă apare o eroare fatală (prin definiția dvs.).
cu toate acestea, setarea valorii de stare nu pare întotdeauna să încheie sesiunea. Aplicații precum Query Analyzer s-ar putea reconecta automat atunci când o conexiune este întreruptă., Deci, pentru a vedea pe deplin beneficiul opțiunii de stat, trebuie să utilizați un instrument precum osql.exe, care nu se reconectează automat după ce o conexiune este întreruptă. Iată o modalitate de a testa opțiunea de stat. La promptul de comandă, tastați
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
Acest cod se întoarce
Test Severity 161>
și să rămână în osql.exe. Execută următoarea linie de la un prompt de comandă:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
returnează un mesaj de eroare
Test State 127
și se revine la promptul de comandă, ieșirea din osql.exe. Dacă utilizați osql.,exe pentru a ridica o eroare cu o stare de 127 după ce crearea unei baze de date eșuează, starea de eroare termină conexiunea și, în consecință, restul scriptului, astfel încât să nu creați obiecte în baza de date greșită.
la începutul scriptului de creare a bazei de date Tsqltutorse alătură.sql, disponibil din linkul „Descărcați codul” din partea de sus a paginii, este următorul cod:
dacă baza de date nu este creată, conexiunea este întreruptă și partea de creare a obiectului din script nu se execută. Am configurat-o în acest fel pentru a vă permite să determinați care sunt erorile (de ex.,, din spațiu pe disc, calea incorectă) înainte de restul scriptului execută. Fără acest cod, dacă crearea bazei de date eșuează și scriptul continuă, ar crea toate obiectele de testare din Baza de date implicită.
când automatizați scripturi, terminarea execuției pe o eroare severă poate fi extrem de utilă. Ridicând o eroare cu o gravitate ridicată, înregistrând-o în Jurnalul de aplicații al vizualizatorului de evenimente și, mai important, ridicând-o cu o stare de 127, vă asigurați că nu sunt create obiecte script în baza de date greșită., În plus, prin logarea în Jurnalul de aplicații al vizualizatorului de evenimente, aveți o pistă de audit a evenimentului.