SQL-variabler: SQL Server Deklarer, angiv og vælg variabel

⚡ Smart opsummering

SQL Server-variabler er navngivne objekter, der fungerer som pladsholdere for en enkelt dataværdi i hukommelsen. En variabel skal deklareres med DECLARE-sætningen, før den kan tildeles en værdi og genbruges.

  • 📦 Definition: En SQL Server-variabel indeholder én værdi og fungerer som en pladsholder for en hukommelsesplacering.
  • ???? Lokalt og globalt: SQL Server understøtter lokale variabler med præfikset @, som brugerne deklarerer, og systemvedligeholdte globale variabler med præfikset @@.
  • 📝 ERKLÆRE: DECLARE-sætningen opretter en variabel og initialiserer den som standard til NULL.
  • 🔀 Tre tildelingsmetoder: En værdi kan tildeles under DECLARE, med SET eller med SELECT.
  • 🔎 Skalære underforespørgsler: Både SET og SELECT kan læse en enkelt værdi fra en forespørgsel ind i en variabel.
  • 🧠 SÆT versus VÆLG: SET tildeler én variabel og følger ANSI-standarden, mens SELECT kan tildele flere på én gang.

SQL Server-variabler: DECLARE, SET og SELECT

Hvad er en variabel i SQL Server?

In MS SQL Server, variabler er objekter, der fungerer som pladsholdere for en hukommelsesplacering. En variabel indeholder en enkelt dataværdi, som du kan læse og genbruge på tværs af en batch eller procedure.

Variabeltyper i SQL: Lokal, Global

MS SQL Server har to typer variabler:

  • Lokal variabel
  • Global variabel

En bruger kan dog kun oprette en lokal variabel. Figuren nedenfor forklarer de to typer variabler, der er tilgængelige i MS SQL Server.

Diagram over de to variabeltyper i SQL Server: lokale variabler og globale variabler

Lokal variabel

  • En bruger erklærer den lokale variabel.
  • Som standard starter et lokalt variabelnavn med @.
  • Hver lokal variabel er begrænset til den aktuelle batch eller procedure inden for en given session.

Global variabel

  • Systemet vedligeholder den globale variabel; en bruger kan ikke deklarere en.
  • Et globalt variabelnavn starter med @@.
  • Den gemmer sessionsrelaterede oplysninger.

Sådan ERKLÆRER du en variabel i SQL

Før du bruger en variabel i en batch eller procedure i SQL, skal du deklarere den. DECLARE-kommandoen opretter en variabel, der fungerer som en pladsholder for en hukommelsesplacering. Først når deklarationen er foretaget, kan variablen bruges i den efterfølgende del af batchen eller proceduren.

TSQL syntaks:

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

Regler:

  • Initialisering er valgfri under deklarering.
  • Som standard initialiserer DECLARE variablen til NULL.
  • Det er valgfrit at bruge søgeordet 'AS'.
  • For at deklarere mere end én lokal variabel, skal du tilføje et komma efter den første definition, derefter give den næste variabel et navn og datatype.

Eksempler på at deklarere en variabel

Forespørgsel: Med 'AS'

DECLARE @COURSE_ID AS INT;

Forespørgsel: Uden 'AS'

DECLARE @COURSE_NAME VARCHAR (10);

Forespørgsel: ERKLÆR to variable

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

Tildeling af en værdi til SQL-variabel

Du kan tildele en værdi til en variabel på følgende tre måder:

  • Under variabeldeklaration ved hjælp af nøgleordet DECLARE.
  • Brug af SET.
  • Brug af SELECT.

Lad os se nærmere på alle tre måder.

Under variabel erklæring ved hjælp af DECLARE nøgleord

T-SQL syntaks:

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

Her kan du efter datatypen bruge '=' efterfulgt af den værdi, der skal tildeles.

Forespørgsel:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Når forespørgslen køres, udskrives den værdi, der blev tildelt under deklarationen, som vist nedenfor.

Output af en variabel tildelt under DECLARE, udskrivning af værdien 5

Brug af SQL SET-variabel

Nogle gange vil man gerne holde deklaration og initialisering adskilt. SET tildeler en værdi til variablen, efter den er blevet deklareret. Nedenfor er de forskellige måder at tildele værdier på ved hjælp af SET.

Eksempel: Tildeling af en værdi til en variabel ved hjælp af SET

Syntaks:

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

Forespørgsel:

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

Udførelse af scriptet returnerer den værdi, der er tildelt med SET, vist nedenfor.

Output for tildeling af en værdi til en variabel ved hjælp af SET, udskrivning 5

Eksempel: Tildel en værdi til flere variabler ved hjælp af SET

Syntaks:

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

Regel: Et SET-nøgleord kan kun tildele en værdi til én variabel.

Forespørgsel:

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

De to PRINT-sætninger returnerer begge tildelte værdier, som vist nedenfor.

Output ved tildeling af to variabler med SET, udskrivning af 5 og UNIX

Eksempel: Tildeling af en værdi til en variabel med en skalar underforespørgsel ved hjælp af SET

Syntaks:

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

Regler:

  • Omslut forespørgslen i parenteser.
  • Forespørgslen skal være en skalar forespørgsel, hvilket betyder, at den kun returnerer én række og én kolonne. Ellers giver forespørgslen en fejl.
  • Hvis forespørgslen returnerer nul rækker, sættes variablen til EMPTY, det vil sige NULL.

Antag at vi har bord som hedder 'Guru99' med to kolonner, som vist nedenfor. Denne tabel bruges i de følgende eksempler.

Guru99 tabel med kolonnerne Tutorial_ID og Tutorial_name brugt i eksemplerne

Eksempel 1: Når underforespørgslen returnerer én række som resultat

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

Fordi underforespørgslen returnerer én matchende række, modtager variablen den værdi, som vist nedenfor.

Output fra en skalar underforespørgsel tildelt med SET, udskriver det matchende vejledningsnavn

Eksempel 2: Når underforespørgslen returnerer nul rækker som resultat

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

Da underforespørgslen ikke returnerer nogen rækker, er variabelværdien EMPTY, dvs. NULL, så intet udskrives, som vist nedenfor.

Output fra en SET skalar underforespørgsel, der ikke returnerer nogen rækker, hvilket efterlader variablen NULL

Brug af SQL SELECT-variabel

Ligesom SET kan du også bruge SELECT til at tildele værdier til variabler efter at have deklareret dem med DECLARE. Nedenfor er forskellige måder at tildele en værdi ved hjælp af SELECT.

Eksempel: Tildeling af en værdi til en variabel ved hjælp af SELECT

Syntaks:

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

Forespørgsel:

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

SELECT-tildelingen udskriver værdien, som vist nedenfor.

Output af tildeling af en værdi til en variabel ved hjælp af SELECT, udskrivning 5

Eksempel: Tildeling af en værdi til flere variabler ved hjælp af SELECT

Syntaks:

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

Regel: I modsætning til SET kan SELECT tildele en værdi til flere variabler adskilt af kommaer.

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

Begge variabler er tildelt i en enkelt SELECT, som vist nedenfor.

Output ved tildeling af to variabler med en enkelt SELECT, udskrivning af 5 og UNIX

Eksempel: Tildeling af værdien til en variabel med en underforespørgsel ved hjælp af SELECT

Syntaks:

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

Regler:

  • Omslut forespørgslen i parenteser.
  • Forespørgslen skal være en skalar forespørgsel, der returnerer én række og én kolonne. Ellers giver forespørgslen en fejl.
  • Hvis forespørgslen returnerer nul rækker, er variablen EMPTY, det vil sige NULL.

Genovervej vores 'Guru99 fods bord.

Eksempel 1: Når underforespørgslen returnerer én række som resultat

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

Underforespørgslen returnerer én række, så variablen indeholder den værdi, som vist nedenfor.

Output fra en skalar underforespørgsel tildelt med SELECT, udskriver det matchende vejledningsnavn

Eksempel 2: Når underforespørgslen returnerer nul rækker som resultat

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

Uden en matchende række forbliver variablen TOM, dvs. NULL, som vist nedenfor.

Output fra en SELECT skalar underforespørgsel, der ikke returnerer nogen rækker, hvilket efterlader variablen NULL

Eksempel 3: Tildel en værdi til en variabel med en almindelig SELECT-sætning

Syntaks:

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

Regler:

  • I modsætning til SET sættes variabelværdien til værdien af ​​den sidste række, hvis forespørgslen returnerer flere rækker.
  • Hvis forespørgslen returnerer nul rækker, sættes variablen til EMPTY, det vil sige NULL.

Forespørgsel 1: Forespørgslen returnerer én række

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

Den enkelte matchende række angiver variabelværdien, som vist nedenfor.

Output fra en almindelig SELECT-tildeling, der returnerer én række

Forespørgsel 2: Forespørgslen returnerer flere rækker

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

Når flere rækker matcher, beholder variablen værdien fra den sidste række, som vist nedenfor.

Output fra en almindelig SELECT-tildeling, der returnerer flere rækker, keeping den sidste rækkeværdi

Forespørgsel 3: Forespørgslen returnerer nul rækker

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

Når ingen rækker matcher, er variablen EMPTY, det vil sige NULL, som vist nedenfor.

Outputtet fra en almindelig SELECT-tildeling returnerer ingen rækker, hvilket efterlader variablen NULL

Andre SQL-variable eksempler

En deklareret variabel kan også bruges i en forespørgsel, for eksempel i en WHERE-klausul til at filtrere rækker.

Forespørgsel:

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

Variablen filtrerer forespørgslen og returnerer den matchende række, som vist nedenfor.

Output af brugen af ​​en variabel i en WHERE-klausul til at filtrere Guru99 bord

Interessante fakta om SQL Server-variabler!

  • En lokal variabel kan vises ved hjælp af PRINT såvel som SELECT-kommandoen.
  • Tabeldatatypen tillader ikke brugen af ​​'AS' under deklaration.
  • SET overholder ANSI-standarder, mens SELECT ikke gør.
  • Det er også tilladt at oprette en lokal variabel med navnet @. For eksempel kan den deklareres som:
'DECLARE @@ as VARCHAR (10)'

Ofte Stillede Spørgsmål

Efter at DECLARE kører uden en tildeling, indeholder en SQL Server-variabel NULL. Variablen findes, men har ingen værdi, før du tildeler en ved hjælp af DECLARE med =, SET eller SELECT. Hvis du refererer til den før tildeling, returneres blot NULL.

Når underforespørgslen ikke returnerer nogen rækker, tildeler SET NULL og overskriver enhver aktuel værdi. SELECT lader i stedet variablen være uændret.ping uanset hvilken værdi den allerede havde. Denne forskel har betydning, når variablen startede med en værdi, der ikke er NULL.

En tabelvariabel, deklareret som DECLARE @t TABLE(…), gemmer et lille resultatsæt, der er begrænset til én batch. I modsætning til en #temp-tabel findes den kun i sin batch, kan ikke ændres efter oprettelse og er ofte egnet til små datasæt.

En lokal variabel er begrænset til den batch, lagrede procedure eller trigger, hvor den er deklareret, inden for én session. GO-nøgleordet afslutter en batch, så en variabel, der er deklareret før GO, kan ikke refereres til efter den.

En variabel kan bruge næsten enhver SQL Server datatype, inklusive int, decimal, varchar, nvarchar, date, datetime, bit og table. Match variablen med den kolonne, den repræsenterer, for at undgå implicitte konverteringsfejl.

Tildel variablen til sig selv igen med SET, for eksempel SET @counter = @counter + 1. SELECT fungerer også: SELECT @total = @total + price. Dette mønster driver løkker og løbende totaler i scripts og lagrede procedurer.

Ja. GitHub Copilot kan generere DECLARE-, SET- og SELECT-sætninger fra kommentarer i naturligt sprog og foreslå passende datatyper. Gennemgå altid de genererede navne, typer og tildelingslogik i forhold til dit skema, før du kører det i produktion.

AI og maskinlæringsassistenter trace hvordan variabler modtager og sender værdier, markerer ikke-initialiserede eller forkert typede variabler og foreslår sætbaserede omskrivninger, der erstatter langsomme variabeldrevne loops. Udvikleren bekræfter stadig hver ændring i forhold til de faktiske data og arbejdsbyrden.

Opsummer dette indlæg med: