Ik hoop dat dit artikel je helpt, ongeacht of je de foutafhandeling van een opgeslagen mssql-procedure opmerkt.
Goedgekeurd: Fortect
Als er een fout optreedt in de plaatsingsroutine, is het beste wat je soms kunt doen (ervan uitgaande dat de fout niet fataal is) in feite om een aantal opeenvolgende codeverwerking op te schorten en vaak naar een ander codesegment in deze routine te springen. Of zet de verwerking terug op de naam waarvoor u solliciteert. Merk op dat de voorafgaande zin vaak verwijst naar niet-fatale fouten.
Foutoverzicht
Foutafhandeling Foutafhandeling in SQL Server stelt ons in staat om specifieke Transact-SQL-codes te manipuleren. Als de tools bijvoorbeeld niet werken zoals verwacht, hebben we de mogelijkheid om u te helpen er iets aan te doen en het mogelijk weer correct te krijgen. Het omgaan met SQL-fouten kan zo eenvoudig zijn dat u het gewoon eens bent met het feit dat er iets is gebeurd, of we proberen vaak de fout te herstellen. In feite wil de fout misschien zelfs terug naar SQL worden vertaald, omdat u allemaal weet hoe gemakkelijk het is om technische SQL Server-foutmeldingen onnodig, complex en bovendien begrijpelijk te maken. Gelukkig hebben we de mogelijkheid om deze berichten om te zetten in iets dat betekenisvoller is voor klanten, ontwikkelaars en meer.
In dit artikel gaan ze dieper in op het schrijven TRY … CATCH: syntaxis, hoe het eruit ziet, hoe het spel werkt en wat te doen in geval van een fout. Ook kan de strategie in SQL Server heel goed worden aangeduid met een set T-SQL-statements / straten, wat in principe altijd de methode van SQL Server is met betrekking tot het accepteren van fouten. Dit is een heel eenvoudig georganiseerde methode, en als je het eenmaal onder de knie hebt, zul je merken dat het in veel gevallen erg handig kan zijn.
Ook aangepakt is de RAISERROR-functie, die onze specifieke foutopmerkingen genereert. Dit is een geweldige manier om verwarrende berichten om te zetten in iets zinvoller dat mensen zouden moeten begrijpen.
Foutafhandeling met TRYâ € ¦CATCH
Dit is het formaat dat eruit ziet. Het is vrij eenvoudig als je eraan wilt wennen. We hebben verschillende bouwstenen van code:
Tussen deze BEGIN TRY en bovendien END TRY staat onze eigen code die we willen traceren op fouten. Dus als er een fout in dit TRY-document was, zou de besturing onmiddellijk worden doorgegeven als de piste naar de CATCH-instructie, en dan zou het moeten beginnen met het uitvoeren van inline-code als dit resultaat van de tekenreeks.
Nu, binnen de CATCH-bevestiging, kunnen we proberen de fout te herstellen, testen met de fout, of zelfs onbetwistbaar de fout loggen, zodat we weten wanneer het is gebeurd, welke personen het hebben gedaan, de fout loggen, gebruikersnaam, allemaal typisch nuttige dingen . We hebben zelfs toegang tot een hoeveelheid bijzondere data die pas na dat CATCH-statement beschikbaar is:
- ERROR_NUMBER – Retourneert u, het interne foutnummer.
- ERROR_STATE – berichten aan de bron retourneren
- ERROR_SEVERITY – Geeft informatie over alles, verre van informatiefouten tot fouten die de DBA-bezoeker kan herstellen, en meer.
- ERROR_LINE – retourneert het nummerDe ep van uw regel waarop de fout is opgetreden.
- ERROR_PROCEDURE – Retourneert de naam die lijkt op een opgeslagen procedure of functie.
- ERROR_MESSAGE – Retourneert de belangrijkste specifieke informatie en dit is de berichttekst die uit alle fouten komt.
Dat is alles wat nodig is om SQL-fouten via de server af te handelen. Alles kan worden gedaan met vrij eenvoudige TRY- en CATCH-instructies, en het enige gebied waar het idee lastig kan zijn, is dat we op elk moment bovenop transacties handelen. Waarom? Want als een TRANSACTION START daadwerkelijk plaatsvindt, moet deze altijd eindigen met een COMMIT- of ROLLBACK-economische clausule. Het slechte nieuws is dat alle fouten optreden nadat ik daadwerkelijk ben begonnen, maar voordat ik een commit plus terugdraai. In dit specifieke geval is meestal een speciale speciale functie die met name kan worden geïmplementeerd in een CATCH-statement waarmee mensen kunnen controleren of een transactie zich in een mooi commit-slot bevindt of niet, waardoor personen vervolgens een terugdraai- of commit-beslissing kunnen nemen.
Laten we verder gaan met SQL Server Management Studio (SSMS) en beginnen met de basisprincipes van SQL Server-foutafhandeling. Het artikel gebruikt een voorbeeldherhaling Review AdventureWorks 2014. Het is zo gemakkelijk om het volgende script op te halen:
Dit is een voorbeeld van hoe het eruit ziet en hoe het effectief is. Het enige dat we doen in BEGIN TRY is 1 delen door 0, wat als proces meestal tot een fout leidt. Zodra deze blokcode wordt aangeraakt, wordt de controle in het account naar het CATCH-blok geplaatst en worden vervolgens alle appartementen met ingebouwde functies geselecteerd waar we eerder precies over rapporteerden. Wanneer we het bovenstaande nulled vbulletin uitvoeren, krijgen we het volgende:
We hebben twee impacttabellen omdat twee SELECT-instructies gerelateerd zijn: alle eerste kan 1 gedeeld door 6 zijn, wat momenteel de fout veroorzaakt, en over het algemeen is de tweede de exact doorgegeven controle die ons fundamenteel de meeste resultaten geeft. Van links als je naar rechts wilt, we hebben ErrorNumber, ErrorSeverity; errorstate, in dat geval is er geen activiteit (NULL), zowel ErrorLine als , alleen ErrorMessage.
Laten we nu een ernstiger probleem oplossen. Er is een redelijke kans op juridische stappen tegen deze fouten. Er zijn over het algemeen dingen die sowieso foutgevoelig zijn, en alleen moeten ze op zijn minst worden opgeschreven. U voegt moeiteloos triggers toe aan deze opgeslagen Excel-spreadsheets, maakt zelfs een e-mailaccount aan en wordt heel creatief in het informeren van mensen wanneer er een fout optreedt.
Als u niet bekend bent met de gegevensbron, lees dan dit artikel voor meer informatie over het type berichtensysteem:
Het volgende script maakt de exacte DB_Errors-tabel, die vaak wordt aangeroepen om traceringsgegevens van verkopers:
Goedgekeurd: Fortect
Fortect is 's werelds meest populaire en effectieve pc-reparatietool. Miljoenen mensen vertrouwen erop dat hun systemen snel, soepel en foutloos blijven werken. Met zijn eenvoudige gebruikersinterface en krachtige scanengine kan Fortect snel een breed scala aan Windows-problemen vinden en oplossen - van systeeminstabiliteit en beveiligingsproblemen tot geheugenbeheer en prestatieproblemen.
Hier hebben we een enkele kleine identificatiekolom gevolgd door de gebruikersnaam, zodat de experts weten wie onze fout heeft veroorzaakt, en de rest van de informatie is vrijwel exacte informatie, die verschilt van onze eigen ingebouwde functies die eerder zijn vermeld.
Laten we nu een bepaalde aangepaste opgeslagen procedure uit de database bewerken en elke fouthandler erin schrijven:
Het wijzigen van deze waardevolle gebruikte procedure wikkelt deze ongevoelige foutafhandeling ongetwijfeld alleen maar rond een enkele opgeslagen methode-instructie. Wanneer we deze opgeschorte procedure noemen als het doorgeven van geldige gegevens, doen zich de volgende tijden voor:
Het feit is snel inDe selectie geeft aan dat een record met succes is ingevoegd:
Als mijn echtgenoot en ik echter de bovenstaande opgeslagen procedure opnieuw aanroepen en dezelfde parameters gebruiken, wordt het resultatenraster anders ingevuld:
Deze keer hadden we slechts twee indicatoren nodig in de resultatentabel:
4 regels aangetast. Deze regel geeft aan dat er hoogstwaarschijnlijk niets in de verkooptabel is opgenomen.
1 toegewezen bereik helemaal. Deze regel geeft aan dat het geschenk ook is ontvangen in onze nieuw gecreëerde handtekeningtabel.
Dus wat we hier ook kunnen doen, is naar de foutentabel kijken en dan kijken wat er is gebeurd. Eén klik op de goedkeuring doet het werk:
hier m
Versnel de prestaties van uw computer nu met deze eenvoudige download.
Maak die de volgende procedure. HET PROCES VAN HET MAKEN VAN SpDemo. HOE TE BEGINNEN. KIES TOP-10 * AUTEURS. ALS @@ RIJCOUNT <11.Volg de procedure. Voer spDemo uit. Dan krijgen kopers de volgende foutmelding te zien. “Server: Msg 50010, Niveau 12, Staat 1, Procedure spDemo, Lijn 5.
De TRY CATCH-constructie vangt alle runtime-complicaties op met een rigoureuze graad van meer dan tien die een internetverbinding met de database niet sluiten. De TRY-blokkade moet onmiddellijk worden overschaduwd door het bijbehorende CATCH-blok. Het opnemen van een ander geldig statement tussen de END TRY- en BEGIN CATCH-statements resulteert in een per formaatfout.
Wanneer gelabeld als voor elk blok, retourneert CATCH ERROR_MESSAGE de volledige geschreven tekst van het foutbericht naar die het corresponderende CATCH-blok bevatte. De tekst biedt vastgestelde waarden voor eventuele vervangbare beperkingen – voor , lengte, objectnamen of tijd. ERROR_MESSAGE retourneert NULL indien extern aangeroepen als onderdeel van een CATCH-blok.