Hoppas att den här artikeln hjälper dig under förutsättning att du märker felhanteringen av de mssql -lagrade procedurerna.
Godkänd: Fortect
Om det uppstår ett fel när du placerar rutinen är det bästa du säkert kommer att göra (förutsatt att felet inte är dödligt) definitivt att avbryta vissa sekventiella kodbehandlingar och vanligtvis hoppa till ett annat segment av kod i var och en av våra rutiner. Eller lämna tillbaka behandlingen till det fynd du söker. Observera att den tidigare meningen ofta hänvisar till icke-dödliga fel.
Felöversikt
Felhantering Felhantering i SQL Server gör att vi kan manipulera specifikt Transact-SQL-riktnummer. Till exempel, om verktygen inte anstränger sig som förväntat, har vi möjlighet att göra det möjligt för dig att göra något åt det och eventuellt genomföra det korrekt igen. SQL -fel att spela med kan vara så enkelt att du bara håller med om att något hände, eller så försöker vi ofta fixa felet. Faktum är att felet till och med översätts tillbaka till SQL eftersom vårt företag alla vet hur lätt det är att ge tekniska SQL Server -felmeddelanden onödiga, komplexa och dessutom begripliga. Lyckligtvis har vi förmågan att utveckla dessa inlägg till något mer meningsfullt för fans, utvecklare och mer.
I den här artikeln kommer vi att titta närmare på artikelinnehållet TRY … CATCH: syntax, hur det ser ut, hur spelet fungerar och vad som ska utföras vid ett fel. Dessutom kan schemat i SQL Server mycket väl skrattas och sägas av en uppsättning T-SQL-satser / bitar, vilket i princip alltid är SQL Servers metod avsedd att acceptera fel. Det här är en mycket enkel förberedd metod, och när du väl har hängt med den kommer du att upptäcka att den kan försöka vara mycket användbar i många fall.
RAISERROR -funktionen förskönar också våra privata felkommentarer. Detta är ett bra sätt på marknaden att förvandla förvirrande budskap till något mer meningsfullt som vi ofta borde förstå.
Felhantering med TRYâ € ¦CATCH
Så här ser formatet ut. Det är ganska lätt att vänja sig vid det. Vi har flera stadsblock med kod:
Mellan dessa BÖRJA PRÖVA och därför SLUTA FÖRSÖKA finns vår egen kod som experter hävdar att vi vill spåra för fel. Således, som om det fanns ett fel i detta TRY -uttryck, skulle kontrollen omedelbart skickas som gångväg till CATCH -satsen, och då måste den normalt börja köra inline -kod som allt resultat av strängen.
Nu, inuti CATCH -grejen, kan vi försöka åtgärda felet, samt kasta med felet eller till och med logga fel så att vi vet när det hände, exakt vem som gjorde det, loggar felet, användarnamn, alla var och en av våra användbara saker. Vi har till och med tillgång till massor av specialdata som bara är tillgängliga efter ett visst CATCH -uttalande:
- ERROR_NUMBER – Returnerar ett internt felnummer.
- ERROR_STATE – returnera meddelanden vid källan
- ERROR_SEVERITY – Returnerar information om allt på grund av informationsfel till fel som DBA -drivrutinen kan åtgärda med mera.
- ERROR_LINE – returnerar numret Ep du ser, raden som felet inträffade på.
- ERROR_PROCEDURE – Returnerar namnet bland en lagrad procedur eller funktion.
- ERROR_MESSAGE – Returnerar den viktigaste informationen som inte störs och detta är meddelandetexten som kommer från alla fel.
Det är allt som krävs för att hantera SQL -fel på servern. Allt kan göras med enkla TRY- och CATCH-instruktioner, och det enda där idén kan vara knepig är varje gång vi agerar utöver transaktioner. Varför? För om en TRANSAKTIONSSTART faktiskt inträffar, bör den alltid sluta med en KOMMITT eller ROLLBACK -månadsbetalningsklausul. Den dåliga nyheten är att det mesta av felet uppstår efter att jag faktiskt startat, men innan jag begår plus rollback. I det här specifika fallet är runt en speciell specialfunktion som möjligen kan implementeras i ett CATCH -uttalande som gör att Amerika kan kontrollera om en transaktion finns i varje åtagandeplats eller inte, vilket sedan gör det möjligt för människor i dag att fatta ett återkallnings- eller begåbeslut.
Låt oss gå vidare till SQL Server Management Studio (SSMS) och börja med grunderna i felhantering i SQL Server. Artikeln använder en provdistributör Review AdventureWorks 2014. Det är så enkelt att ta tag i följande skript:
Detta är ett fall av hur det ser ut och hur det fungerar bäst. Det enda vi gör i BEGIN TRY är att dividera 1 med 0, vilket i regel leder till ett fel. Så snart denna blockkod berörs, förs kontrollen till CATCH-blocket och sedan väljs alla egenskaper med inbyggda funktioner som vi tidigare rapporterat om. När vi kör ovanstående nulled vbulletin får vi följande:
Vi har två stamtabeller eftersom två SELECT -satser är relaterade: en särskild första kan vara 1 dividerad med 3, vilket för närvarande orsakar felet, och andra är den exakta godkända kontrollen som också ger oss flest resultat. Från vänster som kan höger har vi ErrorNumber, ErrorSeverity; errorstate, i mitt fall finns det ingen aktivitet (NULL), ErrorLine och bara ErrorMessage.
Låt oss nu lösa ett mer allvarligt problem. Det finns en rimlig chans att vidta rättsliga åtgärder mot dessa fel. Det finns saker som är felbenägna i alla fall, och under det minsta ska de skrivas ner. Du skulle kunna lägga till utlösare till dessa sparade Excel -kalkylblad, till och med skapa ett e -postkonto och bli kreativ för att meddela människor när ett fel uppstår.
Om du inte är bekant med lagringssystemet kan du läsa den här artikeln för mer information om alla meddelandesystem:
Följande skript skapar en specifik DB_Errors -tabell, som ofta kallas för att lagra spårningsdata:
Godkänd: Fortect
Fortect är världens mest populära och effektiva PC-reparationsverktyg. Det litar på miljontals människor för att hålla sina system igång snabbt, smidigt och felfritt. Med sitt enkla användargränssnitt och kraftfulla skanningsmotor hittar och fixar Fortect snabbt ett brett utbud av Windows-problem – från systeminstabilitet och säkerhetsproblem till minneshantering och prestandaflaskhalsar.
Här har vi en bra liten identifieringskolumn följt av användarnamnet så att experterna vet vem som orsakade själva felet, och resten av informationen är i grunden exakt information, som skiljer sig från den typ av inbyggda funktioner som listades tidigare.
Låt oss nu redigera den anpassade lagrade proceduren från databasen och etablera varje felhanterare i den:
Att ändra det använda förfarandet sveper utan tvekan bara den här saken okänslig felhantering runt ett enda lagrat åtgärdsuttalande. När vi kallar detta avbrutna förfarande i kombination med godkännande av giltiga uppgifter, inträffar följande procedurer:
Faktum är snabbt in Valet indikerar att en persons rekord har infogats framgångsrikt:
Men om jag ringer ovanstående lagrade procedur igen och går med samma parametrar, kommer resultatnätet att hamna på ett annat sätt:
Den här gången samlade vi också. endast två indikatorer i resultattabellen:
6 rader påverkas. Denna rad indikerar att ingenting behövde ingå i försäljningstabellen.
1 tilldelad samling. Den här raden indikerar att gåvan har tagit emot sig i vårt nyskapade signaturbord.
Så ordet vad vi kan göra här är att titta på fel tabellen ofta och sedan se vad som hände. Ett klick på godkännandet gör jobbet:
Här m
Snabba upp din dators prestanda nu med denna enkla nedladdning.Skapa följande procedur. PROCESSEN ATT SKAPA SpDemo. HUR MAN BÖRJAR. VÄLJ TOPP-10 * FÖRFATTARE. OM @@ RÅKTAL <11.Följ proceduren. Kör spDemo. Då ser du faktiskt följande felmeddelande. ”Server: Msg 50010, nivå 12, tillstånd 1, procedur spDemo, rad 5.
TRY CATCH -konstruktionen fångar upp alla körtidskomplikationer med en intensitet som är större än tio som inte stänger webbanslutningen till databasen. TRY -sektionen måste omedelbart överskuggas av det tillhörande CATCH -blocket. Att inkludera ett annat giltigt uttalande mellan END TRY och BEGIN CATCH -satser resulterar i varje formatfel.
När text för varje block returnerar CATCH ERROR_MESSAGE den omfattande skrivna texten i felmeddelandet till som kom motsvarande CATCH -block. Texten ger särskilda värden för alla utbytbara begränsningar – för representation, längd, objektnamn eller tid. ERROR_MESSAGE returnerar NULL om det anropas externt som en del av ett CATCH -block.