Η εντολή TRY … CATCH στο Transact-SQL εντοπίζει και χειρίζεται τις συνθήκες σφάλματος σε εφαρμογές βάσεων δεδομένων. Αυτή η δήλωση είναι ο ακρογωνιαίος λίθος του χειρισμού σφαλμάτων του SQL Server και αποτελεί σημαντικό μέρος της ανάπτυξης ισχυρών εφαρμογών βάσεων δεδομένων. TRY … CATCH ισχύει για τον SQL Server ξεκινώντας από το 2008, Azure SQL Database, Azure SQL Data Warehouse και Παράλληλη αποθήκη δεδομένων.
Παρουσιάζοντας TRY … ΑΛΛΑΓΗ
TRY … Το CATCH λειτουργεί δίνοντάς σας τη δυνατότητα να ορίσετε δύο δηλώσεις Transact-SQL: μία που θέλετε να "δοκιμάσετε" και άλλη να χρησιμοποιήσετε για να "εντοπίσετε" τυχόν σφάλματα που μπορεί να προκύψουν. Όταν ο SQL Server συναντά μια εντολή TRY … CATCH, εκτελεί αμέσως τη δήλωση που περιλαμβάνεται στη ρήτρα TRY. Εάν η εντολή TRY εκτελείται με επιτυχία, ο SQL Server μετακινείται. Ωστόσο, εάν η εντολή TRY δημιουργεί ένα σφάλμα, ο SQL Server εκτελεί την εντολή CATCH για να χειριστεί το σφάλμα χαριτωμένα.
Η βασική σύνταξη παίρνει αυτή τη μορφή:
Αρχίστε να ελέγξετε μπλοκ δηλώσεων END TRYΑΡΧΙΚΗ ΑΛΙΕΥΣΗsql_statementΤΕΛΙΚΟ ΑΠΩΛΕΙΑ ; Είναι εύκολο να κατανοήσετε τη χρήση αυτής της δήλωσης μέσω ενός παραδείγματος. Φανταστείτε ότι είστε ο διαχειριστής μιας βάσης δεδομένων ανθρώπινων πόρων που περιέχει έναν πίνακα που ονομάζεται "Υπάλληλοι", ο οποίος περιέχει πληροφορίες για κάθε έναν από τους υπαλλήλους του οργανισμού σας. Αυτός ο πίνακας χρησιμοποιεί έναν ακέραιο αριθμό αναγνωριστικού υπαλλήλου ως κύριο κλειδί. Ενδέχεται να επιχειρήσετε να χρησιμοποιήσετε την παρακάτω δήλωση για να εισαγάγετε έναν νέο υπάλληλο στη βάση δεδομένων σας: ΕΙΣΑΓΩΓΗ ΣΕ Εργαζόμενοι (id, first_name, last_name, επέκταση)ΑΞΙΕΣ (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, επέκταση)ΑΞΙΕΣ (12497, «Mike», «Chapple», 4201)END TRYΑΡΧΙΚΗ ΑΛΙΕΥΣΗΕΚΤΥΠΩΣΗ 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Αλληλογραφία υπαλλήλων',@recipients = '[email protected]',@body = 'Παρουσιάστηκε σφάλμα κατά τη δημιουργία νέου αρχείου υπαλλήλων.',@subject = 'Σφάλμα αλληλοεπικαλύψεων προσωπικού';ΤΕΛΙΚΟ ΑΠΩΛΕΙΑ
Σε αυτό το παράδειγμα, τυχόν σφάλματα που εμφανίζονται αναφέρονται τόσο στον χρήστη που εκτελεί την εντολή όσο και στη διεύθυνση ηλεκτρονικού ταχυδρομείου [email protected]. Το σφάλμα που εμφανίζεται στο χρήστη είναι: Σφάλμα: Παραβίαση του περιορισμού PRIMARY KEY 'PK_employee_id'. Δεν είναι δυνατή η εισαγωγή διπλού κλειδιού στο αντικείμενο 'dbo.employees'.Ταχυδρομείο στην ουρά.
Η εκτέλεση της εφαρμογής συνεχίζεται κανονικά, επιτρέποντας στον προγραμματιστή να χειριστεί το σφάλμα. Η χρήση της εντολής TRY … CATCH είναι ένας κομψός τρόπος για την ανίχνευση και τη διαχείριση των σφαλμάτων που συμβαίνουν σε εφαρμογές βάσεων δεδομένων του SQL Server. Αν θέλετε να μάθετε περισσότερα σχετικά με τη Δομημένη γλώσσα ερωτημάτων, ανατρέξτε στην Εισαγωγή στη SQL. ΔΟΚΙΜΑΣΤΕ … ΑΛΙΕΥΜΑ Παράδειγμα
Μάθετε περισσότερα