Ο Microsoft SQL Server παρέχει τον μηχανισμό της αποθηκευμένης διαδικασίας για την απλοποίηση της διαδικασίας ανάπτυξης της βάσης δεδομένων, ομαδοποιώντας τις δηλώσεις Transact-SQL σε διαχειρίσιμα μπλοκ. Οι αποθηκευμένες διαδικασίες εκτιμώνται από τους περισσότερους προγραμματιστές του SQL Server, οι οποίοι βρίσκουν τα οφέλη απόδοσης και ασφάλειας που αποκομίζουν, αξίζει τον κόπο να επενδύσουν εγκαίρως εγκαίρως.
Οφέλη από τη χρήση αποθηκευμένων διαδικασιών
Γιατί ένας προγραμματιστής πρέπει να χρησιμοποιεί αποθηκευμένες διαδικασίες;
Εδώ είναι τα βασικά πλεονεκτήματα αυτής της τεχνολογίας:
- Προκατασκευασμένη εκτέλεση: Ο SQL Server μεταγλωττίζει κάθε αποθηκευμένη διαδικασία μία φορά και στη συνέχεια επαναχρησιμοποιεί το σχέδιο εκτέλεσης. Αυτό έχει ως αποτέλεσμα την τεράστια αύξηση της απόδοσης όταν οι αποθηκευμένες διαδικασίες καλούνται επανειλημμένα.
- Μειωμένη επισκεψιμότητα πελάτη / διακομιστή: Εάν το εύρος ζώνης δικτύου είναι ανησυχητικό για το περιβάλλον σας, θα χαρούμε να μάθετε ότι οι αποθηκευμένες διαδικασίες μπορούν να μειώσουν τα μεγάλα ερωτήματα SQL σε μια μόνο γραμμή που μεταδίδεται μέσω του καλωδίου.
- Αποτελεσματική επαναχρησιμοποίηση κώδικα και αφαίρεση προγραμματισμού: Οι αποθηκευμένες διαδικασίες μπορούν να χρησιμοποιηθούν από πολλούς χρήστες και προγράμματα-πελάτες. Εάν τα χρησιμοποιήσετε με έναν προγραμματισμένο τρόπο, θα βρείτε τον κύκλο ανάπτυξης απαιτεί λιγότερο χρόνο.
- Ενισχυμένοι έλεγχοι ασφαλείας: Μπορείτε να δώσετε στους χρήστες την άδεια να εκτελέσουν μια αποθηκευμένη διαδικασία ανεξάρτητα από τα υποκείμενα δικαιώματα πίνακα.
Οι αποθηκευμένες διαδικασίες είναι παρόμοιες με τις λειτουργίες που ορίζονται από το χρήστη, αλλά υπάρχουν και λεπτές διαφορές.
Δομή
Οι αποθηκευμένες διαδικασίες είναι παρόμοιες με τις κατασκευές που εμφανίζονται σε άλλες γλώσσες προγραμματισμού.
Αποδέχονται δεδομένα με τη μορφή παραμέτρων εισόδου που καθορίζονται κατά την εκτέλεση του χρόνου. Αυτές οι παράμετροι εισόδου (αν εφαρμόζονται) χρησιμοποιούνται στην εκτέλεση μιας σειράς δηλώσεων που παράγουν κάποιο αποτέλεσμα. Αυτό το αποτέλεσμα επιστρέφεται στο περιβάλλον κλήσης μέσω της χρήσης μιας σειράς εγγραφών, παραμέτρων εξόδου και ενός κωδικού επιστροφής.
Αυτό μπορεί να ακούγεται σαν μπουκιά, αλλά θα διαπιστώσετε ότι οι αποθηκευμένες διαδικασίες είναι στην πραγματικότητα αρκετά απλές.
Παράδειγμα
Ας ρίξουμε μια ματιά σε ένα πρακτικό παράδειγμα που σχετίζεται με τον πίνακα που ονομάζεται απογραφή που εμφανίζεται στο κάτω μέρος αυτής της σελίδας. Αυτές οι πληροφορίες ενημερώνονται σε πραγματικό χρόνο και οι διαχειριστές αποθήκης ελέγχουν συνεχώς τα επίπεδα των προϊόντων που είναι αποθηκευμένα στην αποθήκη τους και είναι διαθέσιμα για αποστολή. Στο παρελθόν, κάθε διαχειριστής θα τρέχει ερωτήματα παρόμοια με τα ακόλουθα:
SELECT Προϊόν, ΠοσότηταΑΠΟ την απογραφήWHERE Αποθήκη = 'FL'
Αυτό οδήγησε σε αναποτελεσματική απόδοση στον SQL Server. Κάθε φορά που ένας διαχειριστής αποθήκης εκτελέσει το ερώτημα, ο διακομιστής βάσης δεδομένων αναγκάστηκε να επανασυνθέσει το ερώτημα και να το εκτελέσει από την αρχή. Απαιτεί επίσης ο διαχειριστής αποθήκης να έχει γνώση της SQL και κατάλληλα δικαιώματα πρόσβασης στις πληροφορίες πίνακα.Αντ 'αυτού, η διαδικασία μπορεί να απλοποιηθεί μέσω της χρήσης μιας αποθηκευμένης διαδικασίας. Εδώ είναι ο κώδικας για μια διαδικασία που ονομάζεται sp_GetInventory που ανακτά τα επίπεδα αποθέματος για μια δεδομένη αποθήκη. Ο διαχειριστής αποθήκης της Φλόριντα μπορεί στη συνέχεια να αποκτήσει πρόσβαση στα επίπεδα αποθεμάτων εκδίδοντας την εντολή: Ο διαχειριστής αποθήκης της Νέας Υόρκης μπορεί να χρησιμοποιήσει την ίδια αποθηκευμένη διαδικασία για να αποκτήσει πρόσβαση στο απόθεμα της περιοχής αυτής: Χορηγηθεί, αυτό είναι ένα απλό παράδειγμα, αλλά τα οφέλη της αφαίρεσης μπορούν να φανούν εδώ. Ο διαχειριστής αποθήκης δεν χρειάζεται να κατανοεί την SQL ή την εσωτερική λειτουργία της διαδικασίας. Από τη σκοπιά της απόδοσης, η αποθηκευμένη διαδικασία αναρωτιέται. Ο SQL Server δημιουργεί ένα σχέδιο εκτέλεσης μία φορά και στη συνέχεια επαναχρησιμοποιείται συνδέοντας τις κατάλληλες παραμέτρους κατά την εκτέλεση του χρόνου.Τώρα που έχετε μάθει τα πλεονεκτήματα των αποθηκευμένων διαδικασιών, βγείτε εκεί και χρησιμοποιήστε τα. Δοκιμάστε μερικά παραδείγματα και μετρήστε τις βελτιώσεις απόδοσης που επιτεύχθηκαν - θα εκπλαγείτε! Πίνακας ΑποθέματοςΔημιουργία διαδικασίας sp_GetInventory@location varchar (10)ΟΠΩΣ ΚΑΙSELECT Προϊόν, ΠοσότηταΑΠΟ την απογραφήWHERE Αποθήκη = @ θέση
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ταυτότητα Προϊόν Αποθήκη Ποσότητα 142 Φασολάκια NY 100 214 Αρακάς FL 200 825 Καλαμπόκι NY 140 512 Λάμα φασόλια NY 180 491 Ντομάτες FL 80 379 Καρπούζι FL 85