Ένας οδηγός βήμα-βήμα toUsing TRY ... ΑΛΛΑΓΗ για την αντιμετώπιση σφαλμάτων SQL Server

Προσδιορίστε τα σφάλματα χωρίς να διακόψετε την εκτέλεση

Η εντολή TRY ... CATCH στο Transact- SQL ανιχνεύει και χειρίζεται τις συνθήκες σφάλματος στις εφαρμογές της βάσης δεδομένων σας. Αυτή η δήλωση είναι ο ακρογωνιαίος λίθος του χειρισμού σφαλμάτων του SQL Server και αποτελεί σημαντικό μέρος της ανάπτυξης ισχυρών εφαρμογών βάσεων δεδομένων. TRY ... CATCH ισχύει για τον SQL Server από το 2008, Azure SQL Database, Azure SQL Data Warehouse και παράλληλη αποθήκη δεδομένων.

Παρουσιάζοντας TRY..CATCH

TRY ... Το CATCH λειτουργεί δίνοντάς σας τη δυνατότητα να ορίσετε δύο δηλώσεις Transact-SQL: μία που θέλετε να "δοκιμάσετε" και άλλη να χρησιμοποιήσετε για να "εντοπίσετε" τυχόν σφάλματα που μπορεί να προκύψουν. Όταν ο SQL Server συναντά μια εντολή TRY ... CATCH, εκτελεί αμέσως τη δήλωση που περιλαμβάνεται στη ρήτρα TRY. Εάν η εντολή TRY εκτελείται με επιτυχία, ο SQL Server κινείται απλά. Ωστόσο, εάν η εντολή TRY δημιουργεί ένα σφάλμα, ο SQL Server εκτελεί την εντολή CATCH για να χειριστεί με χαρά το σφάλμα.

Η βασική σύνταξη παίρνει αυτή τη μορφή:

ΑΡΧΕΙΤΕ ΔΟΚΙΜΑΣΤΕ {sql_statement | statement_block} ΤΕΛΩΝΕΤΕ ΑΚΡΙΒΩΣ ΑΠΩΛΕΙΑ [{sql_statement | statement_block}] ΤΕΛΟΣ ΑΛΛΟ [; ]

ΔΟΚΙΜΑΣΤΕ ... ΑΛΙΕΥΜΑ Παράδειγμα

Είναι ευκολότερο να κατανοήσετε τη χρήση αυτής της δήλωσης μέσω της χρήσης ενός παραδείγματος. Φανταστείτε ότι είστε ο διαχειριστής μιας βάσης δεδομένων για τους ανθρώπινους πόρους που περιέχει έναν πίνακα που ονομάζεται "Υπάλληλοι", ο οποίος περιέχει πληροφορίες για κάθε έναν από τους υπαλλήλους του οργανισμού σας. Αυτός ο πίνακας χρησιμοποιεί έναν ακέραιο αριθμό αναγνωριστικού υπαλλήλου ως κύριο κλειδί . Ενδέχεται να επιχειρήσετε να χρησιμοποιήσετε την παρακάτω δήλωση για να εισαγάγετε έναν νέο υπάλληλο στη βάση δεδομένων σας:

ΕΙΣΑΓΩΓΕΤΕ στους εργαζόμενους (id, first_name, last_name, επέκταση) VALUES (12497, 'Mike', 'Chapple', 4201)

Υπό κανονικές συνθήκες, αυτή η δήλωση θα προσθέσει μια σειρά στον πίνακα "Υπάλληλοι". Ωστόσο, αν ένας υπάλληλος με αναγνωριστικό ID 12497 υπάρχει ήδη στη βάση δεδομένων, η εισαγωγή της σειράς θα παραβίαζε τον περιορισμό του πρωτεύοντος κλειδιού και θα είχε ως αποτέλεσμα το ακόλουθο σφάλμα:

Msg 2627, Επίπεδο 14, Κατάσταση 1, Γραμμή 1 Παραβίαση του περιορισμού PRIMARY KEY 'PK_employee_id'. Δεν είναι δυνατή η εισαγωγή διπλού κλειδιού στο αντικείμενο 'dbo.employees'. Η δήλωση έχει τερματιστεί.

Παρόλο που το σφάλμα αυτό σας παρέχει τις πληροφορίες που χρειάζεστε για την αντιμετώπιση του προβλήματος, υπάρχουν δύο προβλήματα με αυτό. Πρώτον, το μήνυμα είναι κρυπτό. Περιλαμβάνει κωδικούς σφαλμάτων, αριθμούς γραμμών και άλλες πληροφορίες ακατάληπτες για τον μέσο χρήστη. Δεύτερον, και το πιο σημαντικό, προκαλεί την ακύρωση της δήλωσης και θα μπορούσε να προκαλέσει συντριβή εφαρμογών.

Η εναλλακτική λύση είναι να τυλίξετε τη δήλωση σε μια δήλωση TRY ... CATCH, όπως φαίνεται παρακάτω:

ΑΚΡΙΒΩΣΤΕ ΕΙΣΟΔΟΥΣ ΣΕ ΕΡΓΑΖΟΜΕΝΟΥΣ (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) ΤΕΛΟΣ ΕΛΕΓΞΟΥΜΕ ΑΡΧΙΚΗ ΕΚΤΥΠΩΣΗ ΑΠΟΣΤΟΛΗΣ 'Σφάλμα: + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Αλληλογραφία εργαζομένων', @recipients = 'hr@foo.com', @body = 'Παρουσιάστηκε σφάλμα στη δημιουργία νέου αρχείου υπαλλήλων.', @subject = 'Σφάλμα αλληλεπικάλυψης προσωπικού'; ΤΕΛΙΚΟ ΑΠΩΛΕΙΑ

Σε αυτό το παράδειγμα, τυχόν σφάλματα που εμφανίζονται αναφέρονται τόσο στον χρήστη που εκτελεί την εντολή όσο και στη διεύθυνση ηλεκτρονικού ταχυδρομείου hr@foo.com. Το σφάλμα που εμφανίζεται στον χρήστη εμφανίζεται παρακάτω:

Σφάλμα: Παραβίαση του περιορισμού PRIMARY KEY 'PK_employee_id'. Δεν είναι δυνατή η εισαγωγή διπλού κλειδιού στο αντικείμενο 'dbo.employees'. Ταχυδρομείο στην ουρά.

Το πιο σημαντικό, η εκτέλεση της εφαρμογής συνεχίζεται κανονικά, επιτρέποντας στον προγραμματιστή να χειριστεί με χαρά το σφάλμα. Η χρήση της εντολής TRY ... CATCH είναι ένας κομψός τρόπος για την ανίχνευση και τη διαχείριση των σφαλμάτων που συμβαίνουν σε εφαρμογές βάσεων δεδομένων του SQL Server.

Μάθετε περισσότερα

Αν θέλετε να μάθετε περισσότερα σχετικά με τη Δομημένη γλώσσα ερωτημάτων, διαβάστε την Εισαγωγή στη SQL .