Έχω μάθει συναρτήσεις και αποθηκευμένες διαδικασίες για αρκετό καιρό, αλλά δεν ξέρω γιατί και πότε πρέπει να χρησιμοποιήσω μια συνάρτηση ή μια αποθηκευμένη διαδικασία. Μου φαίνονται ίδιες, ίσως επειδή είμαι κάπως αρχάριος σχετικά με αυτό.
Μπορεί κάποιος να μου πει γιατί;
Οι συναρτήσεις είναι υπολογιστικές τιμές και δεν μπορούν να εκτελέσουν μόνιμες περιβαλλοντικές αλλαγές στον SQL Server (δηλαδή δεν επιτρέπονται οι δηλώσεις INSERT ή UPDATE).
Μια συνάρτηση μπορεί να χρησιμοποιηθεί inline σε εντολές SQL εάν επιστρέφει μια κλιμακωτή τιμή, ή μπορεί να συνδεθεί αν επιστρέφει ένα σύνολο αποτελεσμάτων.
Ένα σημείο που αξίζει να σημειωθεί από τα σχόλια, τα οποία συνοψίζουν την απάντηση. Χάρη στον @Sean K Anderson:
Οι συναρτήσεις ακολουθούν τον ορισμό της επιστήμης των υπολογιστών στο ότι ΠΡΕΠΕΙ να επιστρέφουν μια τιμή και δεν μπορούν να μεταβάλλουν τα δεδομένα που λαμβάνουν ως παραμέτρους. (τα ορίσματα). Οι συναρτήσεις δεν επιτρέπεται να αλλάζουν τίποτα, πρέπει να να έχουν τουλάχιστον μία παράμετρο και πρέπει να επιστρέφουν μία τιμή. Αποθηκευμένο procs δεν χρειάζεται να έχουν μια παράμετρο, μπορούν να αλλάξουν αντικείμενα βάσης δεδομένων, και δεν χρειάζεται να επιστρέφουν μια τιμή.
Γράψτε μια συνάρτηση που ορίζεται από το χρήστη όταν θέλετε να υπολογίσετε και να επιστρέψετε μια τιμή για χρήση σε άλλες εντολές SQL- γράψτε μια αποθηκευμένη διαδικασία όταν θέλετε να ομαδοποιήσετε ένα ενδεχομένως πολύπλοκο σύνολο εντολών SQL. Πρόκειται για δύο αρκετά διαφορετικές περιπτώσεις χρήσης, άλλωστε!
Για να αποφασίσετε πότε να χρησιμοποιήσετε τι θα μπορούσαν να σας βοηθήσουν τα ακόλουθα σημεία-
Οι αποθηκευμένες διαδικασίες δεν μπορούν να επιστρέψουν μια μεταβλητή πίνακα, ενώ η συνάρτηση μπορεί να το κάνει αυτό.
Μπορείτε να χρησιμοποιήσετε αποθηκευμένες διαδικασίες για να αλλάξετε τις παραμέτρους του περιβάλλοντος του διακομιστή, ενώ με τη χρήση συναρτήσεων δεν μπορείτε.
cheers