I Online-instruktionerna för skriptet som skapar TSQLTutorJoins provdatabas från mina tidigare kolumner rekommenderar jag att du använder osql.exe för att köra skriptet från kommandotolken. För att visa varför baserar jag den här månadens kolumn på RAISERROR och ett coolt trick jag lärde mig om att använda RAISERROR-uttalandets tillståndsparameter. Med ett speciellt värde för HÖJNINGENELLER tillståndsparameter kan du tvinga uppsägning av ett komplext skript och förhindra att det körs i fel databas.,
RAISERROR har tre primära komponenter: feltexten, svårighetsgraden och tillståndet. Feltexten kan vara antingen ett hårdkodat eller parametriserat meddelande eller ett felnummer från ett permanent användardefinierat meddelande. För att skapa egna permanenta meddelanden, se SQL Server Books Online (BOL) om hur du använder systemet lagrade proceduren sp_addmessage.
svårighetsgrad har flera definierade nivåer. Utvecklardefinierade fel varierar i svårighetsgrad från 1 till 16, med 16 är den vanligaste och standard. Men inte alla svårighetsgrader fungerar på samma sätt., Tabell 1 visar allvarlighetskategorierna, hur de visar meddelanden i Query Analyzer och hur de eventuellt loggas i Händelsevisarens programlogg. För att logga meddelanden till händelsevisaren kan du använda med logga in ditt RAISERROR-uttalande eller skapa det permanenta meddelandet med hjälp av sp_addmessage med with_log-parametern inställd på ”TRUE”. Det senare valet kommer att skriva varje händelse av detta fel till Händelsevisarens applikationslogg, även om RAISERROR inte anger med LOG., Den förenklade RAISERROR-syntaxen är
RAISERROR (error, severity, state) WITH LOG
till exempel
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
returnerar följande fel till fönstret Meddelanden i Query Analyzer:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
den första raden är information om felnummer, som Tabell 1 beskriver. Query Analyzer visar inte denna information för svårighetsgrad 10. Displayfärgen ändras från svart för severities 1 till 9 till röd för 11 och högre. Exempelskriptet i Lista 1 visar ytterligare syntax och idéer för att använda RAISERROR, inklusive att använda flera språk och parametrisering., Mer information om hur du använder RAISERROR och de olika svårighetsgraderna finns i BOL under följande ämnen: felmeddelanden, allvarlighetsgrader för felmeddelande, RAISERROR, med hjälp av RAISERROR, FORMATMESSAGE och xp_logevent.
förutom svårighetsgrad stöder RAISERROR också ett tillstånd. Många skript för objektskapande skapar en databas och sedan tabeller, procedurer och så vidare i den nyskapade databasen. Men vad händer om skriptet inte skapade databasen ordentligt? Alla ytterligare objekt (t ex,, tabeller, procedurer) skulle skapas i din standarddatabas, som för systemadministratörer kan vara mästare. Att skapa alla dina användardefinierade databasobjekt i huvuddatabasen är precis vad du inte vill, så när du skriver en automatiserad process kan du inkludera ett värde för tillstånd som avslutar skriptet om ett dödligt (enligt din definition) fel inträffar.
men inställningen av statsvärdet verkar inte alltid avsluta sessionen. Program som Query Analyzer kan automatiskt återansluta när en anslutning är trasig., Så, för att fullt ut se fördelen med statsalternativet, måste du använda ett verktyg som osql.exe, som inte återansluter automatiskt efter att en anslutning är trasig. Här är ett sätt att testa statsalternativet. Skriv
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
den här koden returnerar
Test Severity 161>
och du förblir i osql.exe. Kör följande rad från en kommandotolk:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
returnerar felmeddelandet
Test State 127
och returnerar dig till kommandotolken, lämnar osql.exe. Om du använder osql.,exe för att höja ett fel med ett tillstånd av 127 efter att en databasskapande misslyckas, avslutar feltillståndet anslutningen och följaktligen resten av skriptet, så att du inte skapar objekt i fel databas.
i början av databasskapande skript TSQLTutorJoins.sql, tillgänglig från länken ”Ladda ner koden” högst upp på sidan, är följande kod:
om databasen inte skapas bryts anslutningen och objektskapande delen av skriptet körs inte. Jag satte upp det här sättet att låta dig avgöra vad felen är (t. ex.,, av diskutrymme, felaktig sökväg) innan resten av skriptet körs. Utan den här koden, om databasskapandet misslyckas och skriptet fortsätter, skulle det skapa alla testobjekt i din standarddatabas.
När du automatiserar skript kan det vara mycket användbart att avsluta körning på ett allvarligt fel. Genom att höja ett fel med hög svårighetsgrad, Logga det till Händelsevisarens applikationslogg och viktigare, höja det med ett tillstånd av 127, ser du till att inga scriptobjekt skapas i fel databas., Dessutom har du en verifieringskedja för händelsen genom att logga in den i Händelsevisarens programlogg.