A szkript online utasításaiban, amely létrehozza a TSQLTutorJoins minta adatbázist a korábbi oszlopokból, azt javaslom, hogy használja az osql-t.exe futtatni a szkriptet a parancssorból. Hogy bebizonyítsam, miért, az e havi rovatot a RAISERROR-ra alapozom, és egy klassz trükköt, amit a RAISERROR statement paraméterének használatáról tanultam. A RAISERROR state paraméter speciális értékének használatával kényszerítheti egy komplex szkript megszüntetését, valamint megakadályozhatja annak végrehajtását rossz adatbázisban.,
a RAISERROR három fő összetevőből áll: a hibaszövegből, a súlyosságból és az állapotból. A hibaszöveg lehet egy kódolt vagy paraméterezett üzenet vagy egy állandó felhasználó által definiált üzenet hibaszáma. Saját állandó üzenetek létrehozásához tekintse meg az SQL Server Books Online (BOL) oldalt a rendszer tárolt eljárásának használatáról sp_addmessage.
a súlyosságnak több meghatározott szintje van. A fejlesztő által definiált hibák súlyossága 1-től 16-ig terjed, a 16 a leggyakoribb és az alapértelmezett. Azonban nem minden végkielégítés működik ugyanúgy., Az 1. táblázat bemutatja a súlyossági kategóriákat, az üzenetek megjelenítését a Query Analyzer alkalmazásban, valamint azt, hogy az eseménymegjelenítő alkalmazásnaplójában hogyan vannak bejelentkezve. Az üzenetek naplózásához az Eseménynézőbe a log in your RAISERROR utasítás használatával vagy az állandó üzenet létrehozásához használja az sp_addmessage-t a with_log paraméterrel, amely “TRUE” – ra van állítva. Az utóbbi választás a hiba minden előfordulását az Eseménynézegető Alkalmazásnaplójába írja, még akkor is, ha a RAISERROR nem adja meg a naplóval., Az egyszerűsített RAISERROR szintaxis
RAISERROR (error, severity, state) WITH LOG
például
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
a következő hibát adja vissza a Lekérdezőelemző üzenetablakába:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
az első sor a Hibaszámra vonatkozó információ, az 1.táblázat szerint. A Query Analyzer nem jeleníti meg ezt az információt a 10.súlyosság szempontjából. A kijelző színe a feketétől az 1-től a 9-ig terjedő végkielégítésekig 11 vagy annál magasabb piros színig változik. Az 1. listában szereplő minta szkript további szintaxist és ötleteket mutat a RAISERROR használatához, beleértve a több nyelv használatát és a parameterizációt., További információ a RAISERROR és a különböző severities használatáról a következő témakörökben található: hibaüzenetek, Hibaüzenet súlyossági szintek, RAISERROR, Raiserror, FORMATMESSAGE és xp_logevent.
a súlyosság mellett a RAISERROR is támogatja az állapotot. Számos objektumkészítő szkript létrehoz egy adatbázist, majd táblázatokat, eljárásokat stb.Az újonnan létrehozott adatbázisban. De mi van, ha a szkript nem hozta létre megfelelően az adatbázist? Minden további objektum (pl.,, táblázatok, eljárások) jön létre az alapértelmezett adatbázis, amely a rendszergazdák lehet mester. Az összes felhasználó által definiált adatbázisobjektum létrehozása a mesteradatbázisban pontosan az, amit nem akarsz, így amikor egy automatizált folyamatot írsz le, megadhatsz egy értéket az állapothoz, amely megszünteti a szkriptet, ha végzetes (definíció szerint) hiba lép fel.
az állapotérték beállítása azonban nem mindig tűnik úgy, hogy megszünteti a munkamenetet. Az olyan alkalmazások, mint például a Query Analyzer, automatikusan újracsatlakozhatnak, ha a kapcsolat megszakad., Tehát az állami opció előnyeinek teljes körű megtekintéséhez olyan eszközt kell használnia, mint az osql.exe, amely nem csatlakozik automatikusan a kapcsolat megszakítása után. Itt van egy módja annak, hogy tesztelje az állami lehetőséget. A parancssorból írja be a
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
Ez a kód
Test Severity 161>
és marad osql-ben.exe. A következő sor futtatása egy parancssorból:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
visszaadja a
Test State 127
hibaüzenetet, majd visszatér a parancssorba, kilépve az osql-ből.exe. Ha osql-t használ.,ha az adatbázis létrehozása sikertelen, akkor a hibaállapot megszünteti a kapcsolatot, következésképpen a szkript többi részét, hogy ne hozzon létre objektumokat a rossz adatbázisban.
elején az adatbázis-készítő script TSQLTutorJoins.az oldal tetején található “Kód letöltése” linken elérhető sql a következő kód:
Ha az adatbázis nincs létrehozva, a kapcsolat megszakad, és a szkript objektum-létrehozási része nem fut. Úgy állítottam be, hogy lehetővé tegye annak meghatározását, hogy mi a hiba (pl.,, a lemezterületből, helytelen elérési út), mielőtt a szkript fennmaradó része végrehajtja. E kód nélkül, ha az adatbázis létrehozása sikertelen lesz, és a szkript folytatódik, az összes tesztobjektumot létrehozná az alapértelmezett adatbázisban.
a szkriptek automatizálásakor rendkívül hasznos lehet a végrehajtás megszüntetése súlyos hiba esetén. Ha nagy súlyosságú hibát emel ki, naplózod az Eseménynézegető Alkalmazásnaplójába, és ami még fontosabb, 127-es állapotú emeléssel biztosítod, hogy a szkriptobjektumok ne kerüljenek rossz adatbázisba., Ezenkívül az Eseménynézegető Alkalmazásnaplójába történő bejelentkezéssel az esemény ellenőrzési nyomvonala van.