Zmienne SQL: Deklarowanie, ustawianie i wybieranie zmiennych w programie SQL Server
โก Inteligentne podsumowanie
Zmienne SQL Server to nazwane obiekty, ktรณre dziaลajฤ jako symbole zastฤpcze dla pojedynczej wartoลci danych w pamiฤci. Zmienna musi zostaฤ zadeklarowana za pomocฤ instrukcji DECLARE, zanim bฤdzie moลผna przypisaฤ jej wartoลฤ i ponownie jej uลผyฤ.

Co to jest zmienna w SQL Server?
In MS SQL ServerZmienne to obiekty, ktรณre dziaลajฤ jak symbole zastฤpcze dla okreลlonej lokalizacji w pamiฤci. Zmienna przechowuje pojedynczฤ wartoลฤ danych, ktรณrฤ moลผna odczytaฤ i ponownie wykorzystaฤ w partii lub procedurze.
Typy zmiennych w SQL: lokalne, globalne
W programie MS SQL Server wystฤpujฤ dwa typy zmiennych:
- Zmienna lokalna
- Zmienna globalna
Uลผytkownik moลผe jednak utworzyฤ tylko zmiennฤ lokalnฤ . Poniลผszy rysunek wyjaลnia dwa typy zmiennych dostฤpne w MS SQL Server.
Zmienna lokalna
- Uลผytkownik deklaruje zmiennฤ lokalnฤ .
- Domyลlnie nazwa zmiennej lokalnej zaczyna siฤ od @.
- Zakres kaลผdej zmiennej lokalnej jest ograniczony do bieลผฤ cego pakietu lub procedury w ramach danej sesji.
Zmienna globalna
- System utrzymuje zmiennฤ globalnฤ . Uลผytkownik nie moลผe jej zadeklarowaฤ.
- Nazwa zmiennej globalnej zaczyna siฤ od @@.
- Przechowuje informacje zwiฤ zane z sesjฤ .
Jak zadeklarowaฤ zmiennฤ w SQL
Przed uลผyciem jakiejkolwiek zmiennej w partii lub procedurze SQL, musisz jฤ zadeklarowaฤ. Polecenie DECLARE tworzy zmiennฤ , ktรณra dziaลa jako symbol zastฤpczy dla danej lokalizacji w pamiฤci. Dopiero po deklaracji zmienna moลผe zostaฤ uลผyta w dalszej czฤลci zadania wsadowego lub procedury.
Skลadnia TSQL:
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
zasady:
- Inicjalizacja jest opcjonalna podczas deklaracji.
- Domyลlnie DECLARE inicjuje zmiennฤ wartoลciฤ NULL.
- Uลผycie sลowa kluczowego โASโ jest opcjonalne.
- Aby zadeklarowaฤ wiฤcej niลผ jednฤ zmiennฤ lokalnฤ , naleลผy dodaฤ przecinek po pierwszej definicji, a nastฤpnie podaฤ nazwฤ kolejnej zmiennej i typ danych.
Przykลady deklarowania zmiennej
Zapytanie: z โASโ
DECLARE @COURSE_ID AS INT;
Zapytanie: bez โASโ
DECLARE @COURSE_NAME VARCHAR (10);
Zapytanie: Zdeklaruj dwie zmienne
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
Przypisanie wartoลci do zmiennej SQL
Istniejฤ trzy sposoby przypisywania wartoลci zmiennej:
- Podczas deklaracji zmiennej za pomocฤ sลowa kluczowego DECLARE.
- Uลผycie SET.
- Uลผycie SELECT.
Przyjrzyjmy siฤ bliลผej wszystkim trzem sposobom.
Podczas deklaracji zmiennej przy uลผyciu sลowa kluczowego DECLARE
Skลadnia T-SQL:
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
Tutaj po typie danych naleลผy uลผyฤ znaku โ=โ, a po nim wartoลci, ktรณra ma zostaฤ przypisana.
zapytanie:
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
Uruchomienie zapytania powoduje wydrukowanie wartoลci przypisanej podczas deklaracji, jak pokazano poniลผej.
Korzystanie ze zmiennej SQL SET
Czasami chcesz oddzieliฤ deklaracjฤ od inicjalizacji. SET przypisuje wartoลฤ zmiennej po jej zadeklarowaniu. Poniลผej przedstawiono rรณลผne sposoby przypisywania wartoลci za pomocฤ SET.
Przykลad: Przypisywanie wartoลci zmiennej za pomocฤ polecenia SET
Skลadnia:
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
zapytanie:
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
Wykonanie skryptu zwraca wartoลฤ przypisanฤ za pomocฤ SET, jak pokazano poniลผej.
Przykลad: Przypisywanie wartoลci wielu zmiennym za pomocฤ polecenia SET
Skลadnia:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
Reguลa: Jedno sลowo kluczowe SET moลผe przypisaฤ wartoลฤ tylko jednej zmiennej.
zapytanie:
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Oba polecenia PRINT zwracajฤ obie przypisane wartoลci, jak pokazano poniลผej.
Przykลad: Przypisywanie wartoลci zmiennej za pomocฤ podzapytania skalarnego przy uลผyciu polecenia SET
Skลadnia:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
zasady:
- Umieลฤ zapytanie w nawiasach.
- Zapytanie powinno byฤ zapytaniem skalarnym, co oznacza, ลผe โโzwraca tylko jeden wiersz i jednฤ kolumnฤ. W przeciwnym razie zapytanie zgลosi bลฤ d.
- Jeลผeli zapytanie zwrรณci zero wierszy, wรณwczas zmienna zostanie ustawiona na EMPTY, czyli NULL.
Zaลรณลผmy, ลผe mamy stรณล o imieniu 'Guru99' z dwiema kolumnami, jak pokazano poniลผej. Ta tabela jest uลผywana w poniลผszych przykลadach.
Przykลad 1: Gdy podzapytanie zwraca jeden wiersz jako wynik
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
Poniewaลผ podzapytanie zwraca jeden pasujฤ cy wiersz, zmienna otrzymuje tฤ wartoลฤ, jak pokazano poniลผej.
Przykลad 2: Kiedy podzapytanie w wyniku zwraca zero wierszy
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Poniewaลผ podzapytanie nie zwraca ลผadnych wierszy, wartoลฤ zmiennej jest PUSTA, czyli NULL, wiฤc nic nie zostaje wydrukowane, jak pokazano poniลผej.
Korzystanie ze zmiennej SELECT jฤzyka SQL
Podobnie jak w przypadku polecenia SET, polecenie SELECT umoลผliwia rรณwnieลผ przypisanie wartoลci zmiennym po ich zadeklarowaniu poleceniem DECLARE. Poniลผej przedstawiono rรณลผne sposoby przypisywania wartoลci za pomocฤ polecenia SELECT.
Przykลad: Przypisywanie wartoลci zmiennej za pomocฤ polecenia SELECT
Skลadnia:
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
zapytanie:
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
Zadanie SELECT drukuje wartoลฤ, jak pokazano poniลผej.
Przykลad: Przypisywanie wartoลci wielu zmiennym za pomocฤ polecenia SELECT
Skลadnia:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
Reguลa: W przeciwieลstwie do polecenia SET polecenie SELECT pozwala przypisaฤ wartoลฤ wielu zmiennym, rozdzielajฤ c je przecinkami.
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Obie zmienne sฤ przypisywane za pomocฤ jednego polecenia SELECT, jak pokazano poniลผej.
Przykลad: Przypisywanie wartoลci zmiennej za pomocฤ podzapytania przy uลผyciu polecenia SELECT
Skลadnia:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
zasady:
- Umieลฤ zapytanie w nawiasach.
- Zapytanie powinno byฤ skalarne i zwracaฤ jeden wiersz i jednฤ kolumnฤ. W przeciwnym razie zapytanie zgลosi bลฤ d.
- Jeลผeli zapytanie zwrรณci zero wierszy, wรณwczas zmienna jest PUSTA, czyli ma wartoลฤ NULL.
Rozwaลผmy nasze 'GuruStรณล 99'.
Przykลad 1: Gdy podzapytanie zwraca jeden wiersz jako wynik
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
Podzapytanie zwraca jeden wiersz, wiฤc zmienna przechowuje tฤ wartoลฤ, jak pokazano poniลผej.
Przykลad 2: Kiedy podzapytanie w wyniku zwraca zero wierszy
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
W przypadku braku pasujฤ cego wiersza zmienna pozostaje PUSTA, czyli NULL, jak pokazano poniลผej.
Przykลad 3: Przypisanie wartoลci zmiennej za pomocฤ standardowego polecenia SELECT
Skลadnia:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
zasady:
- W przeciwieลstwie do SET, jeลli zapytanie zwraca wiele wierszy, wรณwczas wartoลฤ zmiennej jest ustawiana na wartoลฤ ostatniego wiersza.
- Jeลผeli zapytanie zwrรณci zero wierszy, wรณwczas zmienna zostanie ustawiona na EMPTY, czyli NULL.
Zapytanie 1: Zapytanie zwraca jeden wiersz
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
Pojedynczy pasujฤ cy wiersz ustawia wartoลฤ zmiennej, jak pokazano poniลผej.
Zapytanie 2: Zapytanie zwraca wiele wierszy
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
Jeลli kilka wierszy siฤ zgadza, zmienna zachowuje wartoลฤ z ostatniego wiersza, jak pokazano poniลผej.
Zapytanie 3: Zapytanie zwraca zero wierszy
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
Jeลli nie ma pasujฤ cych wierszy, zmienna jest PUSTA, czyli NULL, jak pokazano poniลผej.
Inne przykลady zmiennych SQL
Zadeklarowanฤ zmiennฤ moลผna rรณwnieลผ wykorzystaฤ wewnฤ trz zapytania, na przykลad w klauzuli WHERE w celu filtrowania wierszy.
zapytanie:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
Zmienna filtruje zapytanie i zwraca pasujฤ cy wiersz, jak pokazano poniลผej.
Interesujฤ ce fakty na temat zmiennych SQL Server!
- Zmiennฤ lokalnฤ moลผna wyลwietliฤ zarรณwno za pomocฤ polecenia PRINT, jak i SELECT.
- Typ danych tabeli nie pozwala na uลผycie โASโ podczas deklaracji.
- SET jest zgodny ze standardami ANSI, natomiast SELECT nie.
- Dozwolone jest rรณwnieลผ utworzenie zmiennej lokalnej o nazwie @. Na przykลad, moลผna jฤ zadeklarowaฤ jako:
'DECLARE @@ as VARCHAR (10)'















