I online-vejledning til det script, der skaber TSQLTutorJoins prøve database fra mine tidligere kolonner, vil jeg anbefale, at du bruger osql.e .e til at køre scriptet fra kommandoprompten. For at demonstrere hvorfor baserer jeg denne måneds kolonne på RAISERROR og et cool trick, jeg lærte om at bruge RAISERROR-sætningens tilstandsparameter. Ved hjælp af en særlig værdi for RAISERROR state-parameteren kan du tvinge opsigelsen af et komplekst script og forhindre dets udførelse i den forkerte database.,
RAISERROR har tre primære komponenter: fejlteksten, sværhedsgraden og staten. Fejlteksten kan enten være en hard-kodet eller parameteriseret besked eller et fejlnummer fra en permanent brugerdefineret meddelelse. For at oprette dine egne permanente meddelelser, se s .l Server Books Online (BOL) om, hvordan du bruger den systemlagrede procedure sp_addmessage.
sværhedsgrad har flere definerede niveauer. Udviklerdefinerede fejl spænder i sværhedsgrad fra 1 til 16, hvor 16 er den mest almindelige og standard. Men ikke alle sværhedsgrader fungerer på samme måde., Tabel 1 viser alvorlighedskategorierne, hvordan de viser meddelelser i Queryuery Analy .er, og hvordan de eventuelt logges ind i Event vie .ers Applikationslog. For at logge beskeder til Event vie .er, kan du bruge med LOG ind din RAISERROR erklæring eller oprette den permanente besked ved hjælp af sp_addmessage med parameterith_log parameter sat til ‘TRUE’. Sidstnævnte valg vil skrive hver forekomst af denne fejl til Event vie .er ansøgning log, selv om RAISERROR ikke angiver med LOG., Den forenklede RAISERROR syntaks er
RAISERROR (error, severity, state) WITH LOG
For eksempel:
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
returnerer følgende fejl beskeder vindue i Query Analyzer:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
Den første linje er Fejl Nummer Info, som det fremgår af Tabel 1 beskriver. Queryuery Analy .er viser ikke disse oplysninger for severity 10. Displayet farve skifter fra sort for sværhedsgrader 1 til 9 til rød for 11 og højere. Eksempelscriptet i notering 1 viser yderligere syntaks og ideer til brug af RAISERROR, herunder brug af flere sprog og parameterisering., For mere information om brug af RAISERROR og de forskellige alvorsgrader, se BOL under følgende emner: fejlmeddelelser Fejlmeddelelse sværhedsgrader, RAISERROR, ved Hjælp af RAISERROR, FORMATMESSAGE, og xp_logevent.
ud over sværhedsgraden understøtter RAISERROR også en tilstand. Mange scripts til oprettelse af objekter opretter en database og derefter tabeller, procedurer og så videre i den nyoprettede database. Men hvad nu hvis scriptet ikke oprettede databasen korrekt? Alle yderligere objekter (f. eks.,, tabeller, procedurer) ville blive oprettet i din standarddatabase, som for systemadministratorer kan være mester. Oprettelse af alle dine brugerdefinerede databaseobjekter i masterdatabasen er præcis, hvad du ikke ønsker, så når du scripting en automatiseret proces, kan du medtage en værdi for stat, der afslutter scriptet, hvis en fatal (ved din definition) fejl opstår.
indstilling af tilstandsværdien ser imidlertid ikke altid ud til at afslutte sessionen. Applikationer såsom Queryuery Analy .er kan automatisk genoprette forbindelse, når en forbindelse er brudt., Så for fuldt ud at se fordelene ved Statens mulighed, skal du bruge et værktøj som os .l.e .e, som ikke tilsluttes automatisk igen, når en forbindelse er brudt. Her er en måde at teste tilstandsindstillingen på. Fra kommandoprompten, type
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
Denne kode returnerer
Test Severity 161>
og du forbliver i osql.e .e. Kører den følgende linje ved en kommandoprompt:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
returnerer den fejlmeddelelse
Test State 127
og du vender tilbage til kommandoprompten, spændende fra osql.e .e. Hvis du bruger os .l.,e .e for at hæve en fejl med en tilstand på 127, når en databaseoprettelse mislykkes, afslutter fejltilstanden forbindelsen og følgelig resten af scriptet, så du ikke opretter objekter i den forkerte database.
i begyndelsen af databasen-skabelse script TS .ltutorjoins.s .l, der er tilgængelig fra linket “do .nload koden” øverst på siden, er følgende kode:
Hvis databasen ikke er oprettet, er forbindelsen brudt, og objektoprettelsesdelen af scriptet udføres ikke. Jeg sætter det op på denne måde for at lade dig bestemme, hvad fejlene er (f. eks.,, ud af diskplads, forkert sti) før resten af scriptet udfører. Uden denne kode, hvis databaseoprettelsen mislykkes, og scriptet fortsætter, ville det oprette alle testobjekter i din standarddatabase.
Når du automatiserer scripts, kan afslutning af udførelse på en alvorlig fejl være yderst nyttig. Ved at hæve en fejl med en høj sværhedsgrad, logge den til Hændelsesviserens Applikationslog og vigtigere, hæve den med en tilstand på 127, sikrer du, at der ikke oprettes scriptobjekter i den forkerte database., Derudover, ved at logge det i Event vie .er ansøgning log, du har et revisionsspor af begivenheden.