SQL varijable: Deklariranje, postavljanje i odabir varijable u SQL Serveru

⚡ Pametni sažetak

Varijable SQL Servera su imenovani objekti koji djeluju kao rezervirana mjesta za jednu vrijednost podataka u memoriji. Varijabla se mora deklarirati naredbom DECLARE prije nego što joj se može dodijeliti vrijednost i ponovno upotrijebiti.

  • ???? Definicija: Varijabla SQL Servera sadrži jednu vrijednost i djeluje kao rezervirano mjesto za lokaciju u memoriji.
  • 🔵 Lokalno i globalno: SQL Server podržava lokalne varijable s prefiksom @ koje korisnici deklariraju i globalne varijable koje održava sustav s prefiksom @@.
  • 📝 PROGLASITI: Naredba DECLARE stvara varijablu i, prema zadanim postavkama, inicijalizira je na NULL.
  • 🔀 Tri metode dodjeljivanja: Vrijednost se može dodijeliti tijekom DECLARE-a, s SET-om ili s SELECT-om.
  • 🔎 Skalarni podupiti: SET i SELECT mogu pročitati jednu vrijednost iz upita u varijablu.
  • 🧠 SET u odnosu na SELECT: SET dodjeljuje jednu varijablu i slijedi ANSI standard, dok SELECT može dodijeliti nekoliko odjednom.

Varijable SQL Servera: DECLARE, SET i SELECT

Što je varijabla u SQL Serveru?

In MS SQL poslužitelj, varijable su objekti koji djeluju kao rezervirana mjesta za lokaciju u memoriji. Varijabla sadrži jednu podatkovnu vrijednost koju možete pročitati i ponovno koristiti u seriji ili postupku.

Vrste varijabli u SQL-u: lokalne, globalne

MS SQL Server ima dvije vrste varijabli:

  • Lokalna varijabla
  • Globalna varijabla

Međutim, korisnik može stvoriti samo lokalnu varijablu. Donja slika objašnjava dvije vrste varijabli dostupne u MS SQL Serveru.

Dijagram dvaju tipova varijabli u SQL Serveru: lokalne varijable i globalne varijable

Lokalna varijabla

  • Korisnik deklarira lokalnu varijablu.
  • Prema zadanim postavkama, naziv lokalne varijable počinje s @.
  • Svaka lokalna varijabla je ograničena na trenutnu seriju ili proceduru unutar dane sesije.

Globalna varijabla

  • Sustav održava globalnu varijablu; korisnik je ne može deklarirati.
  • Naziv globalne varijable počinje s @@.
  • Pohranjuje informacije vezane uz sesiju.

Kako DEKLARIRATI varijablu u SQL-u

Prije korištenja bilo koje varijable u seriji ili postupku u SQL, morate ga deklarirati. Naredba DECLARE stvara varijablu koja djeluje kao rezervirano mjesto za memorijsku lokaciju. Tek nakon što je deklaracija izvršena, varijabla se može koristiti u sljedećem dijelu serije ili postupka.

TSQL sintaksa:

DECLARE  { @LOCAL_VARIABLE[AS] data_type  [ = value ] }

Pravila:

  • Inicijalizacija je opcionalna prilikom deklariranja.
  • Prema zadanim postavkama, DECLARE inicijalizira varijablu na NULL.
  • Upotreba ključne riječi 'AS' nije obavezna.
  • Za deklariranje više od jedne lokalne varijable, dodajte zarez nakon prve definicije, zatim navedite naziv sljedeće varijable i tip podataka.

Primjeri deklariranja varijable

Upit: s 'AS'

DECLARE @COURSE_ID AS INT;

Upit: Bez 'AS'

DECLARE @COURSE_NAME VARCHAR (10);

Upit: DEKLIRAJ dvije varijable

DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);

Dodjeljivanje vrijednosti SQL varijabli

Vrijednost varijabli možete dodijeliti na sljedeća tri načina:

  • Tijekom deklaracije varijable korištenjem ključne riječi DECLARE.
  • Korištenje SET-a.
  • Korištenjem SELECT-a.

Pogledajmo detaljno sva tri načina.

Tijekom deklaracije varijable pomoću ključne riječi DECLARE

T-SQL sintaksa:

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

Ovdje, nakon tipa podataka, možete koristiti '=' nakon čega slijedi vrijednost koja se dodjeljuje.

upita:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Pokretanje upita ispisuje vrijednost dodijeljenu tijekom deklaracije, kao što je prikazano dolje.

Izlaz varijable dodijeljene tijekom DECLARE-a, ispis vrijednosti 5

Korištenje SQL SET varijable

Ponekad je potrebno odvojiti deklaraciju i inicijalizaciju. SET dodjeljuje vrijednost varijabli nakon što je deklarirana. U nastavku su navedeni različiti načini dodjeljivanja vrijednosti pomoću SET-a.

Primjer: Dodjeljivanje vrijednosti varijabli pomoću funkcije SET

Sintaksa:

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

upita:

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

Izvršavanje skripte vraća vrijednost dodijeljenu s SET-om, prikazanu dolje.

Izlaz dodjeljivanja vrijednosti varijabli pomoću SET-a, ispis 5

Primjer: Dodijelite vrijednost više varijabli pomoću naredbe SET

Sintaksa:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>,
SET @Local_Variable_1 = <Value_1>
SET @Local_Variable_2 = <Value_2>

Pravilo: Jedna ključna riječ SET može dodijeliti vrijednost samo jednoj varijabli.

upita:

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SET @COURSE_ID = 5
SET @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Dvije PRINT naredbe vraćaju obje dodijeljene vrijednosti, kao što je prikazano dolje.

Izlaz dodjeljivanja dviju varijabli pomoću naredbe SET, ispis 5 i UNIX

Primjer: Dodjeljivanje vrijednosti varijabli skalarnim podupitom pomoću SET-a

Sintaksa:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)

Pravila:

  • Upit stavite u zagrade.
  • Upit bi trebao biti skalarni upit, što znači da vraća samo jedan redak i jedan stupac. U suprotnom, upit izbacuje grešku.
  • Ako upit vrati nula redaka, tada se varijabla postavlja na EMPTY, odnosno NULL.

Pretpostavimo da imamo stol pod nazivom 'Guru99' s dva stupca, kao što je prikazano dolje. Ova tablica se koristi u sljedećim primjerima.

Guru99 tablica sa stupcima Tutorial_ID i Tutorial_name korištenim u primjerima

Primjer 1: Kada podupit vrati jedan redak kao rezultat

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

Budući da podupit vraća jedan odgovarajući redak, varijabla prima tu vrijednost, kao što je prikazano u nastavku.

Izlaz skalarnog podupita dodijeljenog s SET-om, ispisujući odgovarajući naziv tutorijala

Primjer 2: Kada podupit vrati nula redaka kao rezultat

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

Budući da podupit ne vraća retke, vrijednost varijable je EMPTY, odnosno NULL, pa se ništa ne ispisuje, kao što je prikazano u nastavku.

Izlaz SET skalarnog podupita koji ne vraća nijedan redak, ostavljajući varijablu NULL

Korištenje SQL SELECT varijable

Baš kao i kod SET-a, možete koristiti i SELECT za dodjeljivanje vrijednosti varijablama nakon što ih deklarirate pomoću DECLARE-a. U nastavku su navedeni različiti načini dodjeljivanja vrijednosti pomoću SELECT-a.

Primjer: Dodjeljivanje vrijednosti varijabli pomoću naredbe SELECT

Sintaksa:

DECLARE @LOCAL_VARIABLE <Data_Type>
SELECT @LOCAL_VARIABLE = <Value>

upita:

DECLARE @COURSE_ID INT
SELECT @COURSE_ID = 5
PRINT @COURSE_ID

Naredba SELECT ispisuje vrijednost, kao što je prikazano dolje.

Izlaz dodjeljivanja vrijednosti varijabli pomoću SELECT-a, ispis 5

Primjer: Dodjeljivanje vrijednosti više varijabli pomoću SELECT-a

Sintaksa:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>,  @Local_Variable _2 = <Value_2>

Pravilo: Za razliku od SET-a, SELECT može dodijeliti vrijednost više varijabli odvojenih zarezima.

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Obje varijable su dodijeljene u jednom SELECT-u, kao što je prikazano dolje.

Izlaz dodjeljivanja dviju varijabli s jednim SELECT-om, ispis 5 i UNIX

Primjer: Dodjeljivanje vrijednosti varijabli s podupitorom pomoću SELECT-a

Sintaksa:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)

Pravila:

  • Upit stavite u zagrade.
  • Upit bi trebao biti skalarni upit koji vraća jedan redak i jedan stupac. U suprotnom, upit izbacuje grešku.
  • Ako upit vrati nula redaka, tada je varijabla PRAZNA, odnosno NULL.

Preispitajte naše 'GuruStol od 99'.

Primjer 1: Kada podupit vrati jedan redak kao rezultat

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

Podupit vraća jedan redak, pa varijabla sadrži tu vrijednost, kao što je prikazano u nastavku.

Izlaz skalarnog podupita dodijeljenog s SELECT-om, ispisujući odgovarajući naziv tutorijala

Primjer 2: Kada podupit vrati nula redaka kao rezultat

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

Bez odgovarajućeg retka, varijabla ostaje PRAZNA, odnosno NULL, kao što je prikazano dolje.

Izlaz skalarnog podupita SELECT koji ne vraća nijedan redak, ostavljajući varijablu NULL

Primjer 3: Dodjeljivanje vrijednosti varijabli regularnom SELECT naredbom

Sintaksa:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>

Pravila:

  • Za razliku od SET-a, ako upit vraća više redaka, tada se vrijednost varijable postavlja na vrijednost posljednjeg retka.
  • Ako upit vrati nula redaka, tada se varijabla postavlja na EMPTY, odnosno NULL.

Upit 1: Upit vraća jedan redak

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

Jedan odgovarajući redak postavlja vrijednost varijable, kao što je prikazano dolje.

Izlaz regularne SELECT dodjele vraća jedan redak

Upit 2: Upit vraća više redaka

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

Kada se nekoliko redaka podudara, varijabla zadržava vrijednost iz posljednjeg retka, kao što je prikazano dolje.

Izlaz regularne SELECT naredbe vraća više redaka, keeping vrijednost posljednjeg retka

Upit 3: Upit vraća nula redaka

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

Kada se nijedan red ne podudara, varijabla je PRAZNA, odnosno NULL, kao što je prikazano dolje.

Izlaz regularne SELECT naredbe koja ne vraća nijedan redak, ostavljajući varijablu NULL

Ostali primjeri SQL varijabli

Deklarirana varijabla može se koristiti i unutar upita, na primjer u WHERE klauzuli za filtriranje redaka.

upita:

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

Varijabla filtrira upit i vraća odgovarajući redak, kao što je prikazano u nastavku.

Izlaz korištenja varijable u WHERE klauzuli za filtriranje Guru99 tablica

Zanimljive činjenice o varijablama SQL Servera!

  • Lokalna varijabla može se prikazati pomoću naredbe PRINT kao i naredbe SELECT.
  • Tip podataka tablice ne dopušta korištenje 'AS' tijekom deklaracije.
  • SET je u skladu s ANSI standardima, dok SELECT nije.
  • Također je dopušteno stvaranje lokalne varijable pod nazivom @. Na primjer, može se deklarirati kao:
'DECLARE @@ as VARCHAR (10)'

Pitanja i odgovori

Nakon što se DECLARE pokrene bez dodjeljivanja, varijabla SQL Servera sadrži NULL. Varijabla postoji, ali nema vrijednost dok joj ne dodijelite jednu pomoću DECLARE s =, SET ili SELECT. Pozivanje na nju prije dodjeljivanja jednostavno vraća NULL.

Kada podupit ne vrati nijedan redak, SET dodjeljuje NULL i prepisuje bilo koju trenutnu vrijednost. SELECT umjesto toga ostavlja varijablu nepromijenjenom, keeping bez obzira na vrijednost koju je već imala. Ova razlika je važna kada je varijabla započela s vrijednošću koja nije NULL.

Varijabla tablice, deklarirana kao DECLARE @t TABLE(…), pohranjuje mali skup rezultata ograničen na jednu batch. Za razliku od #temp tablice, ona se nalazi samo unutar svoje batch, ne može se mijenjati nakon stvaranja i često odgovara malim skupovima podataka.

Lokalna varijabla je ograničena na batch, pohranjenu proceduru ili okidač gdje je deklarirana, unutar jedne sesije. Ključna riječ GO završava batch, tako da se na varijablu deklariranu prije GO ne može pozivati ​​nakon nje.

Varijabla može koristiti gotovo bilo koji SQL Server tip podataka, uključujući int, decimal, varchar, nvarchar, date, datetime, bit i table. Uskladite varijablu sa stupcem koji predstavlja kako biste izbjegli implicitne pogreške pretvorbe.

Ponovno dodijelite varijablu samoj sebi pomoću naredbe SET, na primjer SET @counter = @counter + 1. SELECT također funkcionira: SELECT @total = @total + price. Ovaj obrazac pokreće petlje i tekuće zbrojeve unutar skripti i pohranjenih procedura.

Da. GitHub kopilot može generirati DECLARE, SET i SELECT naredbe iz komentara na prirodnom jeziku i predložiti prikladne tipove podataka. Uvijek provjerite generirana imena, tipove i logiku dodjeljivanja u odnosu na vašu shemu prije pokretanja u produkciji.

Asistenti za umjetnu inteligenciju i strojno učenje trackako varijable primaju i prosljeđuju vrijednosti, označavaju neinicijalizirane ili pogrešno tipizirane varijable i predlažu prepisivanja temeljena na skupovima koja zamjenjuju spore petlje vođene varijablama. Programer i dalje potvrđuje svaku promjenu u odnosu na stvarne podatke i radno opterećenje.

Sažmite ovu objavu uz: