SQL változók: SQL Server változó deklarálása, beállítása és kiválasztása

⚡ Okos összefoglaló

Az SQL Server változók névvel ellátott objektumok, amelyek egyetlen adatérték helyőrzőiként működnek a memóriában. Egy változót a DECLARE utasítással kell deklarálni, mielőtt értéket rendelhetnénk hozzá és újra felhasználhatnánk.

  • 📦 Meghatározás: Egy SQL Server változó egy értéket tárol, és helyőrzőként szolgál egy memóriahely számára.
  • 🔵 Helyi és globális: Az SQL Server támogatja a felhasználók által deklarált @ előtaggal ellátott helyi változókat, valamint a rendszer által karbantartott @@ előtaggal ellátott globális változókat.
  • 📝 NYILATKOZAT: A DECLARE utasítás létrehoz egy változót, és alapértelmezés szerint NULL értékre inicializálja azt.
  • 🔀 Három hozzárendelési módszer: Értéket adhatunk hozzá a DECLARE során, a SET vagy a SELECT paranccsal.
  • ???? Skaláris allekérdezések: A SET és a SELECT is képes egyetlen értéket beolvasni egy lekérdezésből egy változóba.
  • 🧠 SET vagy SELECT: A SET egy változót rendel hozzá és az ANSI szabványt követi, míg a SELECT többet is hozzá tud rendelni egyszerre.

SQL Server változók: DECLARE, SET és SELECT

Mi az a változó az SQL Serverben?

In MS SQL ServerA változók olyan objektumok, amelyek helyőrzőkként szolgálnak egy memóriahely számára. Egy változó egyetlen adatértéket tartalmaz, amelyet beolvashat és újra felhasználhat egy kötegben vagy eljárásban.

Változótípusok SQL-ben: lokális, globális

Az MS SQL Server kétféle változóval rendelkezik:

  • Helyi változó
  • Globális változó

A felhasználó azonban csak lokális változót hozhat létre. Az alábbi ábra a MS SQL Serverben elérhető kétféle változót ismerteti.

Az SQL Server két változótípusának diagramja: lokális változók és globális változók

Helyi változó

  • A felhasználó deklarálja a helyi változót.
  • Alapértelmezés szerint a lokális változó neve @ jellel kezdődik.
  • Minden helyi változó hatóköre az adott munkameneten belüli aktuális kötegre vagy eljárásra vonatkozik.

Globális változó

  • A rendszer karbantartja a globális változót; a felhasználó nem deklarálhat ilyet.
  • A globális változó neve @@ karakterrel kezdődik.
  • Munkamenettel kapcsolatos információkat tárol.

Hogyan DECLARE egy változót SQL-ben

Mielőtt bármilyen változót használnánk egy kötegben vagy eljárásban SQL, deklarálnia kell. A DECLARE parancs létrehoz egy változót, amely helyőrzőként szolgál egy memóriahely számára. Csak a deklaráció után használható a változó a köteg vagy eljárás következő részében.

TSQL szintaxis:

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

Szabályok:

  • Az inicializálás opcionális a deklarálás során.
  • Alapértelmezés szerint a DECLARE a változót NULL értékre inicializálja.
  • Az „AS” kulcsszó használata nem kötelező.
  • Több lokális változó deklarálásához vesszőt kell tenni az első definíció után, majd meg kell adni a következő változó nevét. adattípus.

Példák egy változó deklarálására

Lekérdezés: "AS"-vel

DECLARE @COURSE_ID AS INT;

Lekérdezés: "AS" nélkül

DECLARE @COURSE_NAME VARCHAR (10);

Lekérdezés: DECLARE két változót

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

Érték hozzárendelése az SQL-változóhoz

A következő három módon rendelhetsz értéket egy változóhoz:

  • Változó deklarálása során a DECLARE kulcsszó használatával.
  • SET használata.
  • A SELECT használata.

Nézzük meg mindhárom módot részletesen.

Változó deklaráció során a DECLARE kulcsszó használatával

T-SQL szintaxis:

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

Itt az adattípus után használhatjuk az '=' jelet, majd a hozzárendelni kívánt értéket.

Keresés:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

A lekérdezés futtatása kinyomtatja a deklaráció során hozzárendelt értéket, az alábbiak szerint.

A DECLARE függvény során hozzárendelt változó kimenete, az 5-ös érték kinyomtatása

SQL SET változó használata

Néha érdemes a deklarációt és az inicializálást különválasztani. A SET parancs értéket rendel a változóhoz a deklaráció után. Az alábbiakban a SET használatával történő értékadás különböző módjait láthatjuk.

Példa: Érték hozzárendelése egy változóhoz SET használatával

Syntax:

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

Keresés:

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

A szkript végrehajtása a SET paraméterrel hozzárendelt értéket adja vissza, az alábbiak szerint.

Változó értékének SET függvénnyel történő hozzárendelésének kimenete, 5-ös nyomtatás

Példa: Érték hozzárendelése több változóhoz SET használatával

Syntax:

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

Szabály: Egy SET kulcsszó csak egy változóhoz rendelhet értéket.

Keresés:

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

A két PRINT utasítás mindkét hozzárendelt értéket visszaadja, ahogy az alább látható.

Két változó SET paranccsal történő hozzárendelésének kimenete, 5-ös kiírás és UNIX

Példa: Érték hozzárendelése egy változóhoz skaláris allekérdezéssel SET használatával

Syntax:

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

Szabályok:

  • A lekérdezést zárójelbe kell tenni.
  • A lekérdezésnek skaláris lekérdezésnek kell lennie, ami azt jelenti, hogy csak egy sort és egy oszlopot ad vissza. Ellenkező esetben a lekérdezés hibát dob.
  • Ha a lekérdezés nulla sort ad vissza, akkor a változó EMPTY, azaz NULL értékre van állítva.

Tegyük fel, hogy megvan nekünk a táblázat nevezett 'Guru99' két oszloppal, ahogy az alább látható. Ezt a táblázatot használjuk a következő példákban.

Guru99 tábla a példákban használt Tutorial_ID és Tutorial_name oszlopokkal

1. példa: Amikor az alkérés egy sort ad vissza eredményeként

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

Mivel az alkérés egy egyező sort ad vissza, a változó ezt az értéket kapja, az alábbiak szerint.

Egy SET paraméterrel rendelt skaláris allekérdezés kimenete, amely kinyomtatja a megfelelő oktatóanyag nevét.

2. példa: Amikor az alkérés eredményeként nulla sort ad vissza

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

Mivel az alkérdés nem ad vissza sorokat, a változó értéke EMPTY, azaz NULL, így semmi sem kerül kiírásra, ahogy az alább látható.

Egy SET skaláris allekérdezés kimenete, amely nem ad vissza sorokat, és a változó NULL marad.

SQL SELECT változó használata

A SET-hez hasonlóan a SELECT függvénnyel is értékeket rendelhetsz a változókhoz, miután deklaráltad őket a DECLARE függvénnyel. Az alábbiakban különböző módokat mutatunk be az értékek SELECT használatával történő hozzárendeléséhez.

Példa: Érték hozzárendelése egy változóhoz SELECT használatával

Syntax:

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

Keresés:

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

A SELECT értékadás kinyomtatja az értéket, ahogy az alább látható.

Változó értékének SELECT-tel történő hozzárendelésének kimenete, 5-ös kiírás

Példa: Érték hozzárendelése több változóhoz a SELECT használatával

Syntax:

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

Szabály: A SET függvénnyel ellentétben a SELECT függvénnyel több, vesszővel elválasztott változóhoz is rendelhetünk értéket.

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

Mindkét változó egyetlen SELECT-ben kerül értékadásra, az alábbiak szerint.

Két változó egyetlen SELECT-tel történő hozzárendelésének kimenete, 5-ös és UNIX-os kiírás

Példa: Érték hozzárendelése egy változóhoz egy allekérdezéssel SELECT használatával

Syntax:

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

Szabályok:

  • A lekérdezést zárójelbe kell tenni.
  • A lekérdezésnek skaláris lekérdezésnek kell lennie, amely egy sort és egy oszlopot ad vissza. Ellenkező esetben a lekérdezés hibát dob.
  • Ha a lekérdezés nulla sort ad vissza, akkor a változó EMPTY, azaz NULL értékű.

Gondoljuk át a miénketGuru99 lábas asztal.

1. példa: Amikor az alkérés egy sort ad vissza eredményeként

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

Az alkérdés egy sort ad vissza, így a változó ezt az értéket tartja meg, az alábbiak szerint.

Egy SELECT-tel rendelt skaláris allekérdezés kimenete, amely kinyomtatja a találatot tartalmazó oktatóanyag nevét.

2. példa: Amikor az alkérés eredményeként nulla sort ad vissza

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

Egyező sor hiányában a változó ÜRES, azaz NULL marad, az alábbiak szerint.

Egy SELECT skaláris allekérdezés kimenete, amely nem ad vissza sorokat, és a változó NULL marad.

3. példa: Érték hozzárendelése egy változóhoz egy hagyományos SELECT utasítással

Syntax:

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

Szabályok:

  • A SET függvénnyel ellentétben, ha a lekérdezés több sort ad vissza, akkor a változó értéke az utolsó sor értékére van beállítva.
  • Ha a lekérdezés nulla sort ad vissza, akkor a változó EMPTY, azaz NULL értékre van állítva.

1. lekérdezés: A lekérdezés egy sort ad vissza

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

Az egyetlen egyező sor állítja be a változó értékét, az alábbiak szerint.

Egy normál SELECT értékadás kimenete, amely egy sort ad vissza

2. lekérdezés: A lekérdezés több sort ad vissza

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

Ha több sor is egyezik, a változó az utolsó sor értékét tartja meg, az alábbiak szerint.

Egy hagyományos SELECT értékadás kimenete, amely több sort ad vissza, keeping az utolsó sor értéke

3. lekérdezés: A lekérdezés nulla sort ad vissza

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

Ha egyetlen sor sem egyezik, a változó EMPTY, azaz NULL értékű, az alábbiak szerint.

Egy normál SELECT értékadás kimenete, amely nem ad vissza sorokat, és a változó NULL marad

Egyéb SQL-változópéldák

Egy deklarált változó lekérdezéseken belül is használható, például egy WHERE záradékban sorok szűrésére.

Keresés:

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

A változó szűri a lekérdezést, és visszaadja a megfelelő sort, az alábbiak szerint.

WHERE záradékban lévő változó használatának kimenete a szűréshez Guru99 táblázat

Érdekes tények az SQL Server-változókról!

  • Egy lokális változó megjeleníthető a PRINT és a SELECT paranccsal is.
  • A tábla adattípusa nem engedélyezi az 'AS' használatát a deklaráció során.
  • A SET megfelel az ANSI szabványoknak, míg a SELECT nem.
  • Létrehozható egy @ nevű lokális változó is. Például a következőképpen deklarálható:
'DECLARE @@ as VARCHAR (10)'

GYIK

Miután a DECLARE függvény értékadás nélkül lefut, egy SQL Server változó NULL értékű marad. A változó létezik, de nincs értéke, amíg a DECLARE függvény és az =, a SET vagy a SELECT használatával nem rendelünk hozzá értéket. Az értékadás előtti hivatkozás egyszerűen NULL értéket ad vissza.

Amikor az alkérés nem ad vissza sorokat, a SET NULL értéket rendel hozzá, és felülírja az aktuális értéket. A SELECT ehelyett változatlanul hagyja a változót, keeping bármilyen értéket is tartalmazott már. Ez a különbség akkor számít, ha a változó nem NULL értékkel indult.

Egy DECLARE @t TABLE(…) formában deklarált táblaváltozó egy kis, egyetlen batch-re korlátozódó eredményhalmazt tárol. A #temp táblával ellentétben ez a változó csak a saját batch-én belül létezik, létrehozás után nem módosítható, és gyakran kis adathalmazokhoz illik.

Egy lokális változó arra a kötegre, tárolt eljárásra vagy triggerre korlátozódik, ahol deklarálták, egy munkameneten belül. A GO kulcsszó lezárja a köteget, így a GO előtt deklarált változóra nem lehet hivatkozni utána.

Egy változó szinte bármilyen SQL Servert használhat adattípus, beleértve az int, decimal, varchar, nvarchar, date, datetime, bit és table értékeket. Párosítsa a változót az általa képviselt oszloppal az implicit konverziós hibák elkerülése érdekében.

Rendeld át a változót önmagához a SET paranccsal, például SET @counter = @counter + 1. A SELECT is működik: SELECT @total = @total + price. Ez a minta ciklusokat és összegzéseket vezérel szkriptekben és tárolt eljárásokban.

Igen. GitHub másodpilóta Természetes nyelvű megjegyzésekből képes DECLARE, SET és SELECT utasításokat generálni, és megfelelő adattípusokat javasolni. A létrehozott neveket, típusokat és hozzárendelési logikát mindig hasonlítsa össze a sémával, mielőtt éles környezetben futtatná.

MI és gépi tanulási asszisztensek trace hogyan fogadják és adják át a változók az értékeket, jelölik a nem inicializált vagy helytelenül beírt változókat, és halmaz alapú átírásokat javasolnak, amelyek lecserélik a lassú, változóvezérelt ciklusokat. A fejlesztő továbbra is megerősíti az egyes változtatásokat a tényleges adatokkal és munkaterheléssel szemben.

Foglald össze ezt a bejegyzést a következőképpen: