I online instruksjonene for skript som oppretter TSQLTutorJoins eksempel databasen fra min tidligere kolonner, jeg anbefaler at du bruker osql.exe-filen for å kjøre skriptet fra ledeteksten. For å demonstrere hvorfor, jeg basere dette måneds-kolonnen på RAISERROR og en kule triks jeg lærte om hvordan du bruker RAISERROR uttalelse er state-parameteren. Ved hjelp av en spesiell verdi for RAISERROR tilstand parameter, kan du tvinge avslutning av en omfattende skript og hindre at det blir kjøring i feil database.,
RAISERROR har tre primære komponenter: feil tekst, alvorlighetsgrad, og staten. Feilen teksten kan enten være en hard-kodet eller parameterized melding eller en feil nummer fra en fast bruker-definert melding. For å opprette din egen permanent meldinger, se SQL Server Books Online (BOL) om hvordan du bruker systemet lagret prosedyre sp_addmessage.
Alvorlighetsgraden har flere definerte nivåer. Utvikler-definert feil varierer i alvorlighetsgrad fra 1 til 16, med 16 er den vanligste og standard. Imidlertid, ikke alle alvorlighetsgrad fungerer på samme måte., Tabell 1 viser alvorlighetsgraden kategorier, hvor de viser meldinger i Query Analyzer, og hvordan de eventuelt logget i Event Viewer Søknad logg. Logge meldinger hvis du hendelsesliste, kan du bruke MED LOGG på din RAISERROR uttalelse eller opprette permanente melding ved hjelp av sp_addmessage med with_log parameteren satt til ‘TRUE’. Det siste alternativet vil skrive hver forekomst av denne feilen til Event Viewer Søknad logg, selv om RAISERROR ikke angi MED LOGG., Forenklet RAISERROR syntaks er
RAISERROR (error, severity, state) WITH LOG
For eksempel,
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
returnerer følgende feilmelding meldinger-vinduet i Query Analyzer:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
Den første linjen er Feil Antall Info, som Tabell 1 beskriver. Query Analyzer viser ikke denne informasjonen for alvorlighetsgraden 10. Displayet endres fargen fra svart til alvorlighetsgrad 1 til og med 9 til rødt for 11 og høyere. Eksempelskriptet i Liste 1 viser flere syntaks og ideer for bruk RAISERROR, inkludert bruk av flere språk og parameterization., For mer informasjon om bruk av RAISERROR og de ulike alvorlighetsgrad, se BOL under følgende emner: Feilmeldinger Feilmelding Alvorlighetsgrad, RAISERROR, ved Hjelp av RAISERROR, FORMATMESSAGE, og xp_logevent.
I tillegg til alvorlighetsgrad, RAISERROR støtter også en tilstand. Mange objekt-oppretting av skript opprette en database og deretter tabeller, prosedyrer og så videre innenfor den nyopprettede databasen. Men hva hvis skriptet ikke opprette databasen på riktig måte? Alle de ekstra objekter (f.eks.,, tabeller, prosedyrer) vil bli opprettet i standard database, som for systemer administratorer kan være master. Å skape alle bruker-definert database objekter i master database er akkurat hva du ikke vil, så når du er skripting en automatisert prosess, kan du inkludere en verdi for staten som avslutter skriptet hvis en dødelig ved din definisjon) feil oppstår.
Imidlertid innstillingen staten verdi ikke alltid komme til å avslutte økten. Programmer som Query Analyzer kan gjenopprettes automatisk når en tilkobling er brutt., Så, for å fullt ut ser nytten av staten alternativet, trenger du å bruke et verktøy som osql.exe, noe som ikke kobler automatisk etter at en tilkobling er brutt. Her er en måte å teste staten alternativ. Fra ledeteksten skriver du inn
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
Denne koden returnerer
Test Severity 161>
og du er fortsatt i osql.exe. Å kjøre følgende kommando fra en ledetekst:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
returnerer feilmelding
Test State 127
og du kommer tilbake til ledeteksten, avslutter osql.exe. Hvis du bruker osql.,exe til å heve en feil med en tilstand av 127 etter en database creation svikter, feil staten avslutter tilkoblingen, og følgelig resten av skriptet, slik at du ikke opprette objekter i feil database.
i begynnelsen av database-oppretting av skript TSQLTutorJoins.sql, tilgjengelig fra «Last ned Koden» lenken på toppen av siden, er følgende kode:
Hvis databasen ikke er opprettet, den forbindelse er brutt og objekt-etablering del av skriptet ikke utføre. Jeg setter det opp på denne måten for å la deg avgjøre hva som er feil (f.eks., ut av diskplass, feil vei) før resten av skriptet utføres. Uten denne koden, hvis det kan ikke opprette database og skriptet fortsetter, vil det skape alle testobjektene i standard database.
Når du er automatisering skript, avslutte kjøring på en alvorlig feil, kan være svært nyttig. Ved å heve en feil med en høy alvorlighetsgrad, logging det til Event Viewer Søknad logger, og mer viktig, heve den med en tilstand av 127, du sørge for at ingen script objekter som er opprettet i feil database., I tillegg, ved å logge deg det i Event Viewer Søknad logge deg, har du et revisjonsspor for arrangementet.