Μεταβλητές SQL: Δήλωση, ορισμός και επιλογή μεταβλητής στον SQL Server
⚡ Έξυπνη Σύνοψη
Οι μεταβλητές του SQL Server είναι επώνυμα αντικείμενα που λειτουργούν ως placeholders για μια μεμονωμένη τιμή δεδομένων στη μνήμη. Μια μεταβλητή πρέπει να δηλωθεί με την πρόταση DECLARE προτού της αντιστοιχιστεί μια τιμή και επαναχρησιμοποιηθεί.

Τι είναι μια μεταβλητή στον SQL Server;
In MS SQL Server, οι μεταβλητές είναι αντικείμενα που λειτουργούν ως placeholders για μια θέση μνήμης. Μια μεταβλητή περιέχει μια μεμονωμένη τιμή δεδομένων που μπορείτε να διαβάσετε και να επαναχρησιμοποιήσετε σε μια δέσμη ή διαδικασία.
Τύποι μεταβλητών σε SQL: Τοπικό, Καθολικό
Ο MS SQL Server έχει δύο τύπους μεταβλητών:
- Τοπική μεταβλητή
- Καθολική μεταβλητή
Ωστόσο, ένας χρήστης μπορεί να δημιουργήσει μόνο μια τοπική μεταβλητή. Το παρακάτω σχήμα εξηγεί τους δύο τύπους μεταβλητών που είναι διαθέσιμοι στο MS SQL Server.
Τοπική μεταβλητή
- Ένας χρήστης δηλώνει την τοπική μεταβλητή.
- Από προεπιλογή, το όνομα μιας τοπικής μεταβλητής ξεκινά με @.
- Κάθε τοπική μεταβλητή έχει εύρος ζώνης στην τρέχουσα παρτίδα ή διαδικασία εντός μιας δεδομένης συνεδρίας.
Καθολική μεταβλητή
- Το σύστημα διατηρεί την καθολική μεταβλητή· ένας χρήστης δεν μπορεί να δηλώσει μία.
- Ένα όνομα καθολικής μεταβλητής ξεκινά με @@.
- Αποθηκεύει πληροφορίες που σχετίζονται με την περίοδο λειτουργίας.
Πώς να ΔΗΛΩΣΕΤΕ μια μεταβλητή στην SQL
Πριν από τη χρήση οποιασδήποτε μεταβλητής σε μια παρτίδα ή διαδικασία στο SQL, πρέπει να το δηλώσετε. Η εντολή DECLARE δημιουργεί μια μεταβλητή που λειτουργεί ως placeholder για μια θέση μνήμης. Μόνο αφού γίνει η δήλωση μπορεί η μεταβλητή να χρησιμοποιηθεί στο επόμενο μέρος της δέσμης ή της διαδικασίας.
Σύνταξη TSQL:
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
κανόνες:
- Η αρχικοποίηση είναι προαιρετική κατά τη δήλωση.
- Από προεπιλογή, το DECLARE αρχικοποιεί τη μεταβλητή σε NULL.
- Η χρήση της λέξης-κλειδιού «AS» είναι προαιρετική.
- Για να δηλώσετε περισσότερες από μία τοπικές μεταβλητές, προσθέστε ένα κόμμα μετά τον πρώτο ορισμό και, στη συνέχεια, δώστε το όνομα της επόμενης μεταβλητής. Τύπος δεδομένων.
Παραδείγματα δήλωσης μεταβλητής
Ερώτημα: Με "AS"
DECLARE @COURSE_ID AS INT;
Ερώτημα: Χωρίς "AS"
DECLARE @COURSE_NAME VARCHAR (10);
Ερώτημα: ΔΗΛΩΣΤΕ δύο μεταβλητές
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
Εκχώρηση τιμής στη μεταβλητή SQL
Μπορείτε να αντιστοιχίσετε μια τιμή σε μια μεταβλητή με τους ακόλουθους τρεις τρόπους:
- Κατά τη δήλωση μεταβλητών χρησιμοποιώντας τη λέξη-κλειδί DECLARE.
- Χρησιμοποιώντας το SET.
- Χρησιμοποιώντας την ΕΠΙΛΟΓΗ.
Ας δούμε και τους τρεις τρόπους αναλυτικά.
Κατά τη δήλωση μεταβλητής χρησιμοποιώντας λέξη-κλειδί DECLARE
Σύνταξη T-SQL:
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
Εδώ, μετά τον τύπο δεδομένων μπορείτε να χρησιμοποιήσετε το σύμβολο '=' ακολουθούμενο από την τιμή που θα αντιστοιχιστεί.
Ερώτηση:
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
Η εκτέλεση του ερωτήματος εκτυπώνει την τιμή που έχει αντιστοιχιστεί κατά τη δήλωση, όπως φαίνεται παρακάτω.
Χρήση μεταβλητής SQL SET
Μερικές φορές θέλετε να διατηρήσετε τη δήλωση και την αρχικοποίηση ξεχωριστά. Το SET αντιστοιχίζει μια τιμή στη μεταβλητή αφού δηλωθεί. Παρακάτω αναφέρονται οι διαφορετικοί τρόποι αντιστοίχισης τιμών χρησιμοποιώντας το SET.
Παράδειγμα: Ανάθεση τιμής σε μια μεταβλητή χρησιμοποιώντας το SET
Σύνταξη:
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
Ερώτηση:
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
Η εκτέλεση του σεναρίου επιστρέφει την τιμή που έχει αντιστοιχιστεί με την εντολή SET, η οποία φαίνεται παρακάτω.
Παράδειγμα: Αντιστοίχιση τιμής σε πολλαπλές μεταβλητές χρησιμοποιώντας τη συνάρτηση SET
Σύνταξη:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
Κανόνας: Μία λέξη-κλειδί SET μπορεί να αντιστοιχίσει τιμή μόνο σε μία μεταβλητή.
Ερώτηση:
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Οι δύο εντολές PRINT επιστρέφουν και τις δύο τιμές που έχουν αντιστοιχιστεί, όπως φαίνεται παρακάτω.
Παράδειγμα: Ανάθεση τιμής σε μια μεταβλητή με ένα βαθμωτό υποερώτημα χρησιμοποιώντας το SET
Σύνταξη:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
κανόνες:
- Περικλείστε το ερώτημα σε παρενθέσεις.
- Το ερώτημα θα πρέπει να είναι ένα βαθμωτό ερώτημα, που σημαίνει ότι επιστρέφει μόνο μία γραμμή και μία στήλη. Διαφορετικά, το ερώτημα εμφανίζει σφάλμα.
- Εάν το ερώτημα επιστρέψει μηδενικές γραμμές, τότε η μεταβλητή ορίζεται σε EMPTY, δηλαδή, NULL.
Υποθέστε ότι έχουμε το τραπέζι με το όνομα 'Guru99' με δύο στήλες, όπως εμφανίζεται παρακάτω. Αυτός ο πίνακας χρησιμοποιείται στα ακόλουθα παραδείγματα.
Παράδειγμα 1: Όταν το υποερώτημα επιστρέφει μία γραμμή ως αποτέλεσμα
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
Επειδή το υποερώτημα επιστρέφει μία αντίστοιχη γραμμή, η μεταβλητή λαμβάνει αυτήν την τιμή, όπως φαίνεται παρακάτω.
Παράδειγμα 2: Όταν το υποερώτημα επιστρέφει μηδενικές γραμμές ως αποτέλεσμα
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Επειδή το υποερώτημα δεν επιστρέφει γραμμές, η τιμή της μεταβλητής είναι ΚΕΝΟ, δηλαδή NULL, επομένως δεν εκτυπώνεται τίποτα, όπως φαίνεται παρακάτω.
Χρήση μεταβλητής SQL SELECT
Όπως ακριβώς και με το SET, μπορείτε επίσης να χρησιμοποιήσετε την εντολή SELECT για να αντιστοιχίσετε τιμές σε μεταβλητές αφού τις δηλώσετε με την εντολή DECLARE. Παρακάτω θα βρείτε διαφορετικούς τρόπους για να αντιστοιχίσετε μια τιμή χρησιμοποιώντας την εντολή SELECT.
Παράδειγμα: Ανάθεση τιμής σε μια μεταβλητή χρησιμοποιώντας το SELECT
Σύνταξη:
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
Ερώτηση:
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
Η ανάθεση SELECT εκτυπώνει την τιμή, όπως φαίνεται παρακάτω.
Παράδειγμα: Ανάθεση τιμής σε πολλαπλές μεταβλητές χρησιμοποιώντας το SELECT
Σύνταξη:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
Κανόνας: Σε αντίθεση με το SET, το SELECT μπορεί να αντιστοιχίσει μια τιμή σε πολλαπλές μεταβλητές χωρισμένες με κόμματα.
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Και οι δύο μεταβλητές αντιστοιχίζονται σε ένα μόνο SELECT, όπως φαίνεται παρακάτω.
Παράδειγμα: Ανάθεση της τιμής σε μια μεταβλητή με ένα υποερώτημα χρησιμοποιώντας SELECT
Σύνταξη:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
κανόνες:
- Περικλείστε το ερώτημα σε παρενθέσεις.
- Το ερώτημα θα πρέπει να είναι ένα βαθμωτό ερώτημα που επιστρέφει μία γραμμή και μία στήλη. Διαφορετικά, το ερώτημα εμφανίζει σφάλμα.
- Εάν το ερώτημα επιστρέψει μηδενικές γραμμές, τότε η μεταβλητή είναι ΚΕΝΟ, δηλαδή NULL.
Επανεξετάστε το δικό μαςGuruΤραπέζι 99'.
Παράδειγμα 1: Όταν το υποερώτημα επιστρέφει μία γραμμή ως αποτέλεσμα
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
Το υποερώτημα επιστρέφει μία γραμμή, επομένως η μεταβλητή διατηρεί αυτήν την τιμή, όπως φαίνεται παρακάτω.
Παράδειγμα 2: Όταν το υποερώτημα επιστρέφει μηδενικές γραμμές ως αποτέλεσμα
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Χωρίς αντίστοιχη γραμμή, η μεταβλητή παραμένει ΚΕΝΟ, δηλαδή NULL, όπως φαίνεται παρακάτω.
Παράδειγμα 3: Αντιστοίχιση τιμής σε μια μεταβλητή με μια κανονική εντολή SELECT
Σύνταξη:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
κανόνες:
- Σε αντίθεση με το SET, εάν το ερώτημα επιστρέφει πολλές γραμμές, τότε η τιμή της μεταβλητής ορίζεται στην τιμή της τελευταίας γραμμής.
- Εάν το ερώτημα επιστρέψει μηδενικές γραμμές, τότε η μεταβλητή ορίζεται σε EMPTY, δηλαδή, NULL.
Ερώτημα 1: Το ερώτημα επιστρέφει μία γραμμή
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
Η μοναδική αντίστοιχη γραμμή ορίζει την τιμή της μεταβλητής, όπως φαίνεται παρακάτω.
Ερώτημα 2: Το ερώτημα επιστρέφει πολλαπλές γραμμές
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
Όταν ταιριάζουν αρκετές γραμμές, η μεταβλητή διατηρεί την τιμή από την τελευταία γραμμή, όπως φαίνεται παρακάτω.
Ερώτημα 3: Το ερώτημα επιστρέφει μηδενικές γραμμές
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
Όταν δεν υπάρχουν γραμμές που να ταιριάζουν, η μεταβλητή είναι ΚΕΝΟ, δηλαδή NULL, όπως φαίνεται παρακάτω.
Άλλα παραδείγματα μεταβλητών SQL
Μια δηλωμένη μεταβλητή μπορεί επίσης να χρησιμοποιηθεί μέσα σε ένα ερώτημα, για παράδειγμα σε μια ρήτρα WHERE για το φιλτράρισμα γραμμών.
Ερώτηση:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
Η μεταβλητή φιλτράρει το ερώτημα και επιστρέφει την αντίστοιχη γραμμή, όπως φαίνεται παρακάτω.
Ενδιαφέροντα στοιχεία για τις μεταβλητές του SQL Server!
- Μια τοπική μεταβλητή μπορεί να εμφανιστεί χρησιμοποιώντας την εντολή PRINT καθώς και την εντολή SELECT.
- Ο τύπος δεδομένων πίνακα δεν επιτρέπει τη χρήση του 'AS' κατά τη δήλωση.
- Το SET συμμορφώνεται με τα πρότυπα ANSI, ενώ το SELECT όχι.
- Επιτρέπεται επίσης η δημιουργία μιας τοπικής μεταβλητής με όνομα @. Για παράδειγμα, μπορεί να δηλωθεί ως:
'DECLARE @@ as VARCHAR (10)'















