Variabili SQL: Dichiarazione, impostazione e selezione di variabili in SQL Server

โšก Riepilogo intelligente

Le variabili di SQL Server sono oggetti denominati che fungono da segnaposto per un singolo valore di dati in memoria. Una variabile deve essere dichiarata con l'istruzione DECLARE prima che le possa essere assegnato un valore e riutilizzata.

  • ๐Ÿ“ฆ Definizione: Una variabile di SQL Server contiene un singolo valore e funge da segnaposto per una posizione di memoria.
  • ???? Locale e globale: SQL Server supporta variabili locali con prefisso @ dichiarate dagli utenti e variabili globali gestite dal sistema con prefisso @@.
  • ๐Ÿ“ DICHIARARE: L'istruzione DECLARE crea una variabile e, per impostazione predefinita, la inizializza a NULL.
  • ๐Ÿ”€ Tre metodi di assegnazione: รˆ possibile assegnare un valore durante la fase DECLARE, con SET o con SELECT.
  • ๐Ÿ”Ž Sottoquery scalari: Sia SET che SELECT possono leggere un singolo valore da una query e assegnarlo a una variabile.
  • ๐Ÿง  SET contro SELECT: SET assegna una sola variabile e segue lo standard ANSI, mentre SELECT puรฒ assegnarne diverse contemporaneamente.

Variabili di SQL Server: DECLARE, SET e SELECT

Cos'รจ una variabile in SQL Server?

In MS SQL ServerLe variabili sono oggetti che fungono da segnaposto per una posizione di memoria. Una variabile contiene un singolo valore di dati che รจ possibile leggere e riutilizzare in un batch o in una procedura.

Tipi di variabili in SQL: locale, globale

MS SQL Server ha due tipi di variabili:

  • Variabile locale
  • Variabile globale

Tuttavia, un utente puรฒ creare solo variabili locali. La figura seguente illustra i due tipi di variabili disponibili in MS SQL Server.

Schema dei due tipi di variabili in SQL Server: variabili locali e variabili globali

Variabile locale

  • Un utente dichiara la variabile locale.
  • Per impostazione predefinita, il nome di una variabile locale inizia con @.
  • Ogni variabile locale รจ limitata al batch o alla procedura corrente all'interno di una determinata sessione.

Variabile globale

  • Il sistema gestisce la variabile globale; un utente non puรฒ dichiararne una.
  • Il nome di una variabile globale inizia con @@.
  • Memorizza le informazioni relative alla sessione.

Come DICHIARARE una variabile in SQL

Prima di utilizzare qualsiasi variabile in un batch o in una procedura in SQLรˆ necessario dichiararla. Il comando DECLARE crea una variabile che funge da segnaposto per una posizione di memoria. Solo dopo la dichiarazione la variabile puรฒ essere utilizzata nella parte successiva del batch o della procedura.

Sintassi TSQL:

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

Regole:

  • L'inizializzazione รจ facoltativa durante la dichiarazione.
  • Per impostazione predefinita, DECLARE inizializza la variabile a NULL.
  • L'uso della parola chiave "AS" รจ facoltativo.
  • Per dichiarare piรน di una variabile locale, aggiungi una virgola dopo la prima definizione, quindi specifica il nome della variabile successiva e tipo di dati.

Esempi di dichiarazione di una variabile

Domanda: Con 'AS'

DECLARE @COURSE_ID AS INT;

Domanda: senza "AS"

DECLARE @COURSE_NAME VARCHAR (10);

Query: DICHIARARE due variabili

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

Assegnazione di un valore alla variabile SQL

รˆ possibile assegnare un valore a una variabile nei seguenti tre modi:

  • Durante la dichiarazione di variabili tramite la parola chiave DECLARE.
  • Utilizzo di SET.
  • Utilizzo di SELECT.

Analizziamo nel dettaglio tutte e tre le modalitร .

Durante la dichiarazione di variabile utilizzando la parola chiave DECLARE

Sintassi T-SQL:

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

Qui, dopo il tipo di dato, รจ possibile utilizzare il simbolo '=' seguito dal valore da assegnare.

Query:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

L'esecuzione della query stampa il valore assegnato durante la dichiarazione, come mostrato di seguito.

Output di una variabile assegnata durante DECLARE, che stampa il valore 5

Utilizzo della variabile SQL SET

A volte รจ preferibile mantenere separate la dichiarazione e l'inizializzazione. L'istruzione SET assegna un valore alla variabile dopo che รจ stata dichiarata. Di seguito sono riportati i diversi modi per assegnare valori utilizzando SET.

Esempio: Assegnazione di un valore a una variabile tramite SET

Sintassi:

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

Query:

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

L'esecuzione dello script restituisce il valore assegnato con SET, come mostrato di seguito.

Output dell'assegnazione di un valore a una variabile tramite SET, stampa 5

Esempio: Assegnare un valore a piรน variabili utilizzando SET

Sintassi:

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

Regola: Una singola parola chiave SET puรฒ assegnare un valore a una sola variabile.

Query:

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

Le due istruzioni PRINT restituiscono entrambi i valori assegnati, come mostrato di seguito.

Output dell'assegnazione di due variabili con SET, stampa 5 e UNIX

Esempio: Assegnazione di un valore a una variabile con una sottoquery scalare utilizzando SET

Sintassi:

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

Regole:

  • Inserire la query tra parentesi.
  • La query deve essere scalare, ovvero deve restituire una sola riga e una sola colonna. In caso contrario, la query genererร  un errore.
  • Se la query restituisce zero righe, la variabile viene impostata su VUOTA, ovvero su NULL.

Supponiamo di avere il tavolo di nome 'Guru99' con due colonne, come mostrato di seguito. Questa tabella viene utilizzata negli esempi seguenti.

Guru99 tabelle con le colonne Tutorial_ID e Tutorial_name utilizzate negli esempi

Esempio 1: Quando la sottoquery restituisce una riga come risultato

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

Poichรฉ la sottoquery restituisce una riga corrispondente, la variabile riceve tale valore, come mostrato di seguito.

Output di una sottoquery scalare assegnata con SET, che stampa il nome del tutorial corrispondente

Esempio 2: Quando la sottoquery restituisce zero righe come risultato

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

Poichรฉ la sottoquery non restituisce righe, il valore della variabile รจ VUOTO, ovvero NULL, quindi non viene stampato nulla, come mostrato di seguito.

Output di una sottoquery scalare SET che non restituisce righe, lasciando la variabile NULL

Utilizzo della variabile SQL SELECT

Proprio come con SET, รจ possibile utilizzare SELECT anche per assegnare valori alle variabili dopo averle dichiarate con DECLARE. Di seguito sono riportati diversi modi per assegnare un valore utilizzando SELECT.

Esempio: Assegnazione di un valore a una variabile tramite SELECT

Sintassi:

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

Query:

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

L'assegnazione SELECT stampa il valore, come mostrato di seguito.

Output dell'assegnazione di un valore a una variabile tramite SELECT, stampa 5

Esempio: Assegnazione di un valore a piรน variabili tramite SELECT

Sintassi:

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

Regola: A differenza di SET, SELECT puรฒ assegnare un valore a piรน variabili separate da virgole.

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

Entrambe le variabili vengono assegnate in un'unica istruzione SELECT, come mostrato di seguito.

Output dell'assegnazione di due variabili con una singola SELECT, stampando 5 e UNIX

Esempio: Assegnazione del valore a una variabile con una sottoquery utilizzando SELECT

Sintassi:

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

Regole:

  • Inserire la query tra parentesi.
  • La query deve essere scalare e restituire una riga e una colonna. In caso contrario, la query genera un errore.
  • Se la query restituisce zero righe, la variabile รจ VUOTA, ovvero NULL.

Riconsidera il nostro 'GuruTavolo da 99'.

Esempio 1: Quando la sottoquery restituisce una riga come risultato

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

La sottoquery restituisce una riga, quindi la variabile contiene tale valore, come mostrato di seguito.

Output di una sottoquery scalare assegnata con SELECT, che stampa il nome del tutorial corrispondente

Esempio 2: Quando la sottoquery restituisce zero righe come risultato

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

In assenza di una riga corrispondente, la variabile rimane VUOTA, ovvero NULL, come mostrato di seguito.

Output di una sottoquery scalare SELECT che non restituisce righe, lasciando la variabile NULL

Esempio 3: Assegnare un valore a una variabile con una normale istruzione SELECT

Sintassi:

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

Regole:

  • A differenza di SET, se la query restituisce piรน righe, il valore della variabile viene impostato sul valore dell'ultima riga.
  • Se la query restituisce zero righe, la variabile viene impostata su VUOTA, ovvero su NULL.

Query 1: La query restituisce una riga

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

La singola riga corrispondente imposta il valore della variabile, come mostrato di seguito.

Output di un'assegnazione SELECT standard che restituisce una riga

Query 2: La query restituisce piรน righe

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

Quando piรน righe corrispondono, la variabile mantiene il valore dell'ultima riga, come mostrato di seguito.

Output di un'assegnazione SELECT regolare che restituisce piรน righe, mantieniping valore dell'ultima riga

Query 3: La query restituisce zero righe

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

Quando non vengono trovate corrispondenze, la variabile รจ VUOTA, ovvero NULL, come mostrato di seguito.

L'output di una normale assegnazione SELECT non restituisce righe, lasciando la variabile NULL

Altri esempi di variabili SQL

Una variabile dichiarata puรฒ essere utilizzata anche all'interno di una query, ad esempio in una clausola WHERE per filtrare le righe.

Query:

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

La variabile filtra la query e restituisce la riga corrispondente, come mostrato di seguito.

Output dell'utilizzo di una variabile in una clausola WHERE per filtrare GuruTabella 99

Fatti interessanti sulle variabili di SQL Server!

  • Una variabile locale puรฒ essere visualizzata sia tramite il comando PRINT che tramite il comando SELECT.
  • Il tipo di dati tabella non consente l'uso di 'AS' durante la dichiarazione.
  • SET รจ conforme agli standard ANSI, mentre SELECT no.
  • รˆ inoltre consentito creare una variabile locale denominata @. Ad esempio, puรฒ essere dichiarata come:
'DECLARE @@ as VARCHAR (10)'

DOMANDE FREQUENTI

Dopo l'esecuzione di DECLARE senza assegnazione di valore, una variabile di SQL Server contiene NULL. La variabile esiste ma non ha alcun valore finchรฉ non le si assegna un valore utilizzando DECLARE con =, SET o SELECT. Il riferimento alla variabile prima dell'assegnazione restituisce semplicemente NULL.

Quando la sottoquery non restituisce righe, SET assegna NULL e sovrascrive qualsiasi valore corrente. SELECT invece lascia la variabile invariata, mantenendoping qualunque sia il valore che giร  possedeva. Questa differenza รจ rilevante quando la variabile inizialmente aveva un valore diverso da NULL.

Una variabile di tabella, dichiarata come DECLARE @t TABLE(โ€ฆ), memorizza un piccolo set di risultati limitato a un singolo batch. A differenza di una tabella temporanea (#temp), esiste solo all'interno del batch, non puรฒ essere modificata dopo la creazione ed รจ spesso adatta a set di dati di piccole dimensioni.

Una variabile locale รจ limitata al batch, alla stored procedure o al trigger in cui viene dichiarata, all'interno di una singola sessione. La parola chiave GO termina un batch, quindi una variabile dichiarata prima di GO non puรฒ essere referenziata successivamente.

Una variabile puรฒ utilizzare quasi qualsiasi server SQL tipo di datiTra i tipi supportati figurano int, decimal, varchar, nvarchar, date, datetime, bit e table. Associa la variabile alla colonna che rappresenta per evitare errori di conversione implicita.

Riassegna la variabile a se stessa con SET, ad esempio SET @counter = @counter + 1. Anche SELECT funziona: SELECT @total = @total + price. Questo schema รจ alla base dei cicli e dei totali progressivi all'interno di script e stored procedure.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub Puรฒ generare istruzioni DECLARE, SET e SELECT a partire da commenti in linguaggio naturale e suggerire tipi di dati appropriati. Prima di eseguire il codice in produzione, รจ sempre consigliabile verificare i nomi, i tipi e la logica di assegnazione generati confrontandoli con lo schema in uso.

Assistenti basati su intelligenza artificiale e apprendimento automatico tracIl sistema analizza come le variabili ricevono e trasmettono valori, segnala le variabili non inizializzate o con tipi errati e suggerisce riscritture basate su insiemi che sostituiscono i cicli lenti basati su variabili. Lo sviluppatore deve comunque confermare ogni modifica confrontandola con i dati e il carico di lavoro effettivi.

Riassumi questo post con: