Μεταβλητές SQL: SQL Server Δήλωση, Ορισμός και επιλογή μεταβλητής

Τι είναι μια μεταβλητή στον SQL Server;

Στο MS SQL, οι μεταβλητές είναι το αντικείμενο που λειτουργεί ως σύμβολο κράτησης θέσης σε μια θέση μνήμης. Μεταβλητή κράτηση μεμονωμένης τιμής δεδομένων.

Τύποι μεταβλητών σε SQL: Τοπικό, Καθολικό

Το MS SQL έχει δύο τύπους μεταβλητών:

  1. Τοπική μεταβλητή
  2. Καθολική μεταβλητή.

Ωστόσο, ο χρήστης μπορεί να δημιουργήσει μόνο μια τοπική μεταβλητή.

Το παρακάτω σχήμα εξηγεί δύο τύπους μεταβλητών που διατίθενται σε Διακομιστής MS SQL.

Μεταβλητές SQL
Τύπος μεταβλητών στον SQL Server

Τοπική μεταβλητή

  • Ένας χρήστης δηλώνει την τοπική μεταβλητή.
  • Από προεπιλογή, μια τοπική μεταβλητή ξεκινά με @.
  • Κάθε εύρος τοπικής μεταβλητής έχει τον περιορισμό στο τρέχουσα παρτίδα ή διαδικασία σε κάθε δεδομένη συνεδρία.

Καθολική μεταβλητή

  • Το σύστημα διατηρεί την καθολική μεταβλητή. Ένας χρήστης δεν μπορεί να τα δηλώσει.
  • Η καθολική μεταβλητή ξεκινά με @@
  • Αποθηκεύει πληροφορίες σχετικά με τη συνεδρία.

Πώς να ΔΗΛΩΣΕΤΕ μια μεταβλητή στην SQL

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

Σύνταξη 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

Μπορείτε να αντιστοιχίσετε μια τιμή σε μια μεταβλητή στα ακόλουθα τρία τρόπους:

  1. Κατά τη δήλωση μεταβλητής χρησιμοποιώντας λέξη-κλειδί DECLARE.
  2. Χρήση SET
  3. Χρησιμοποιώντας το SELECT

Ας ρίξουμε μια ματιά και στους τρεις τρόπους αναλυτικά:

Κατά τη δήλωση μεταβλητής χρησιμοποιώντας λέξη-κλειδί DECLARE

Σύνταξη T-SQL:

DECLARE { @Local_Variable [AS] Datatype [ = value ] }

Εδώ, μετά τον τύπο δεδομένων μπορούμε να χρησιμοποιήσουμε το '=' ακολουθούμενο από την τιμή που θα εκχωρηθεί

Ερώτηση:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Εκχώρηση τιμής στη μεταβλητή SQL

Χρήση SQL SET VARIABLE

Μερικές φορές θέλουμε να διατηρήσουμε τη δήλωση και την προετοιμασία ξεχωριστά. Το SET μπορεί να χρησιμοποιηθεί για την εκχώρηση τιμών στη μεταβλητή, μετά τη δήλωση μιας μεταβλητής. Ακολουθούν οι διάφοροι τρόποι εκχώρησης τιμών χρησιμοποιώντας το SET:

Παράδειγμα: Εκχώρηση τιμής σε μια μεταβλητή χρησιμοποιώντας το SET

Σύνταξη:

DECLARE @Local_Variable <Data_Type>
SET @Local_Variable =  <Value>

Ερώτηση:

DECLARE @COURSE_ID AS INT
SET @COURSE_ID = 5
PRINT @COURSE_ID

ΜΕΤΑΒΛΗΤΗ ΣΕΤ SQL

Παράδειγμα: Εκχωρήστε μια τιμή σε πολλαπλές μεταβλητές χρησιμοποιώντας το 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

ΜΕΤΑΒΛΗΤΗ ΣΕΤ SQL

Παράδειγμα: Εκχώρηση τιμής σε μεταβλητή με a Scalar Subquery χρησιμοποιώντας το 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" με δύο στήλες όπως εμφανίζονται παρακάτω:

ΜΕΤΑΒΛΗΤΗ ΣΕΤ SQL

Θα χρησιμοποιήσουμε τον πίνακα "Guru99" στα περαιτέρω σεμινάρια

Παράδειγμα 1: Όταν το υποερώτημα επιστρέφετε μια σειρά ως αποτέλεσμα.

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

ΜΕΤΑΒΛΗΤΗ ΣΕΤ SQL

Παράδειγμα 2: Όταν το υποερώτημα επιστρέφει μηδενική σειρά ως αποτέλεσμα

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Στη συγκεκριμένη περίπτωση, η τιμή της μεταβλητής είναι EMPTY, δηλαδή NULL.

ΜΕΤΑΒΛΗΤΗ ΣΕΤ SQL

Χρήση SQL SELECT VARIABLE

Ακριβώς όπως το 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

SQL 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

SQL 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>)

κανόνες:

  • Εσωκλείστε το ερώτημα σε παρένθεση.
  • Το ερώτημα πρέπει να είναι βαθμωτό ερώτημα. Το βαθμωτό ερώτημα είναι το ερώτημα με το αποτέλεσμα ως μία γραμμή και μία στήλη. Διαφορετικά, το ερώτημα θα προκαλέσει σφάλμα.
  • Εάν το ερώτημα επιστρέφει μηδέν σειρές, τότε η μεταβλητή είναι EMPTY, δηλαδή NULL.
  • Επανεξετάστε τον πίνακα "Guru99".

Παράδειγμα 1: Όταν το υποερώτημα επιστρέφετε μια σειρά ως αποτέλεσμα.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1)
PRINT @COURSE_NAME

SQL SELECT ΜΕΤΑΒΛΗΤΗΣ

Παράδειγμα 2: Όταν το υποερώτημα επιστρέφει μηδενική σειρά ως αποτέλεσμα

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Στη συγκεκριμένη περίπτωση, η μεταβλητή είναι σε EMPTY, δηλαδή NULL.

SQL SELECT ΜΕΤΑΒΛΗΤΗΣ

Παράδειγμα 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

SQL SELECT ΜΕΤΑΒΛΗΤΗΣ

Ερώτημα 2: Το ερώτημα επιστρέφει πολλές σειρές.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

Σε αυτήν την ειδική περίπτωση, η τιμή μεταβλητής είναι οριστεί η τιμή της τελευταίας σειράς.

SQL SELECT ΜΕΤΑΒΛΗΤΗΣ

Ερώτημα 3: Το ερώτημα επιστρέφει μηδέν σειρές.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

Στη συγκεκριμένη περίπτωση, η μεταβλητή είναι EMPTY, δηλαδή NULL.

SQL SELECT ΜΕΤΑΒΛΗΤΗΣ

Άλλα παραδείγματα μεταβλητών SQL

Χρήση μεταβλητής στο ερώτημα

Ερώτηση:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

Άλλη μεταβλητή SQL

Ενδιαφέροντα στοιχεία για τις μεταβλητές του SQL Server!

  • Μια τοπική μεταβλητή μπορεί να εμφανιστεί χρησιμοποιώντας PRINT καθώς και SELECT COMMAND
  • Ο τύπος δεδομένων πίνακα δεν επιτρέπει τη χρήση "AS" κατά τη δήλωση.
  • Το SET συμμορφώνεται με τα πρότυπα ANSI ενώ το SELECT όχι.
  • Επιτρέπεται επίσης η δημιουργία τοπικής μεταβλητής με το όνομα @. Μπορούμε να το δηλώσουμε ως, για παράδειγμα:
    'DECLARE @@ as VARCHAR (10)'
    

Σύνοψη

  • Οι μεταβλητές είναι το αντικείμενο που λειτουργεί ως σύμβολο κράτησης θέσης.
  • Υπάρχουν δύο τύποι μεταβλητών: Τοπική και Καθολική
  • Μπορούμε να αντιστοιχίσουμε τη μεταβλητή με τους ακόλουθους τρεις τρόπους: Κατά τη χρήση 1) ΔΗΛΩΣΗ 2) Χρήση SET 3) ΧΡΗΣΗ ΕΠΙΛΟΓΗΣ