Espressioni (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

Un'espressione è una combinazione di simboli e operatori che vengono valutati da Motore di database di SQL Server in modo da restituire un singolo valore di dati. Le espressioni semplici possono essere costituite da un'unica costante, variabile, colonna o funzione scalare. È possibile utilizzare gli operatori per unire due o più espressioni semplici in modo da ottenere un'espressione complessa.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

-- Syntax for SQL Server and Azure SQL Database  
  
{ constant | scalar_function | [ table_name. ] column | variable   
    | ( expression ) | ( scalar_subquery )   
    | { unary_operator } expression   
    | expression { binary_operator } expression   
    | ranking_windowed_function | aggregate_windowed_function  
}  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  

-- Expression in a SELECT statement  
<expression> ::=   
{  
    constant   
    | scalar_function   
    | column  
    | variable  
    | ( expression  )  
    | { unary_operator } expression   
    | expression { binary_operator } expression   
}  
[ COLLATE Windows_collation_name ]  
  
-- Scalar Expression in a DECLARE, SET, IF...ELSE, or WHILE statement  
<scalar_expression> ::=  
{  
    constant   
    | scalar_function   
    | variable  
    | ( expression  )  
    | (scalar_subquery )  
    | { unary_operator } expression   
    | expression { binary_operator } expression   
}  
[ COLLATE { Windows_collation_name ]  
  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

Termine Definizione
constant Simbolo che rappresenta un singolo valore di dati specifico. Per altre informazioni, vedere Costanti (Transact-SQL).
scalar_function Unità di sintassi Transact-SQL che offre un servizio specifico e restituisce un valore singolo. scalar_function può essere costituito da funzioni scalari predefinite, ad esempio SUM, GETDATE o CAST, o da funzioni scalari definite dall'utente.
[ table_name . ] Nome o alias di una tabella.
column Nome di colonna. In un'espressione è consentito soltanto il nome della colonna.
variable Nome di una variabile o parametro. Per altre informazioni, vedere DECLARE @local_variable (Transact-SQL).
( expression ) Qualsiasi espressione valida, in base a quanto definito in questo argomento. Le parentesi sono operatori di raggruppamento che assicurano che tutti gli operatori dell'espressione tra parentesi siano valutati prima che l'espressione risultante venga combinata con un'altra espressione.
( scalar_subquery ) Sottoquery che restituisce un valore. Ad esempio:

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator } Gli operatori unari possono essere applicati solo a espressioni che restituiscono un tipo di dati appartenente alla categoria dei tipi di dati numerici. Operatore con un solo operando numerico:

+ indica un numero positivo.

- indica un numero negativo.

~ indica l'operatore di complemento a uno.
{ binary_operator } Operatore che consente di definire la modalità in base a cui due espressioni vengono unite per ottenere un unico risultato. binary_operator può essere un operatore aritmetico, l'operatore di assegnazione (=), un operatore bit per bit, un operatore di confronto, un operatore logico, l'operatore di concatenazione delle stringhe (+) o un operatore unario. Per altre informazioni sugli operatori, vedere Operatori (Transact-SQL).
ranking_windowed_function Qualsiasi funzione di rango Transact-SQL. Per altre informazioni, vedere Funzioni di rango (Transact-SQL).
aggregate_windowed_function Qualsiasi funzione di aggregazione Transact-SQL con la clausola OVER. Per altre informazioni, vedere Clausola OVER - (Transact-SQL).

Risultati dell'espressione

Per un'espressione semplice costituita da un'unica costante, variabile, funzione scalare o colonna, il tipo di dati, le regole di confronto, la precisione, la scala e il valore dell'espressione coincidono con quelli dell'elemento a cui viene fatto riferimento.

Quando due espressioni vengono unite tramite operatori di confronto o logici, viene restituito uno dei tre valori di tipo booleano seguenti: TRUE, FALSE o UNKNOWN. Per altre informazioni sui tipi di dati booleani, vedere Comparison Operators (Transact-SQL) (Operatori di confronto (Transact-SQL)).

Quando due espressioni vengono unite tramite operatori aritmetici, bit per bit o di stringa, il tipo di dati restituito dipende dall'operatore.

Le espressioni complesse costituite da più simboli e operatori restituiscono un unico valore. Il tipo di dati, le regole di confronto, la precisione e il valore dell'espressione risultante vengono determinati tramite l'unione di due espressioni componenti alla volta, fino a ottenere il risultato finale. La sequenza in base a cui vengono unite le espressioni è definita dall'ordine di precedenza degli operatori utilizzati nell'espressione.

Commenti

È possibile combinare due espressioni mediante un operatore se entrambe utilizzano tipi di dati supportati dall'operatore e se almeno una delle condizioni seguenti è vera:

  • Alle espressioni è applicato lo stesso tipo di dati.

  • Il tipo di dati con precedenza minore può essere convertito in modo implicito nel tipo di dati con precedenza maggiore.

Se le espressioni non soddisfano tali condizioni, è possibile utilizzare funzioni CAST o CONVERT per convertire esplicitamente il tipo di dati con precedenza minore nel tipo di dati con precedenza maggiore oppure in un tipo di dati intermedio, che può essere quindi convertito implicitamente nel tipo di dati con precedenza maggiore.

Se non sono supportate né la conversione implicita né quella esplicita, non è possibile combinare le due espressioni.

Le regole di confronto di un'espressione che restituisce una stringa di caratteri vengono impostate in base alle regole sulla precedenza delle regole di confronto. Per altre informazioni, vedere Precedenza delle regole di confronto (Transact-SQL).

In un linguaggio di programmazione come C o Microsoft Visual Basic, un'espressione restituisce sempre un unico risultato. Le espressioni in un elenco di selezione Transact-SQL seguono una variante di questa regola, in quanto vengono valutate singolarmente per ogni riga del set di risultati. Una stessa espressione può avere un valore diverso in ogni riga del set di risultati, ma ogni riga include un solo valore per l'espressione. Nell'istruzione SELECT seguente, ad esempio, il riferimento a ProductID e il termine 1+2 nell'elenco di selezione sono entrambi espressioni:

USE AdventureWorks2012;  
GO  
SELECT ProductID, 1+2  
FROM Production.Product;  
GO  

L'espressione 1+2 restituisce 3 in ogni riga del set di risultati. Sebbene l'espressione ProductID generi un valore univoco in ogni riga del set di risultati, ogni riga include un solo valore per ProductID.

  • Azure Synapse Analytics alloca una quantità di memoria massima fissa a ogni thread, in modo che nessun thread possa usare tutta la memoria. Parte di questa memoria viene usata per archiviare le espressioni di query. Se una query ha troppe espressioni e la memoria necessaria supera il limite interno, il motore non la eseguirà. Per evitare questo problema, gli utenti possono modificare la query in più query con un numero minore di espressioni in ognuna. Ad esempio, nel caso di una query con un lungo elenco di espressioni nella clausola WHERE:
DELETE FROM dbo.MyTable 
WHERE
(c1 = '0000001' AND c2 = 'A000001') or
(c1 = '0000002' AND c2 = 'A000002') or
(c1 = '0000003' AND c2 = 'A000003') 
/* ... additional, similar expressions omitted for simplicity */

Modificare la query come segue:

DELETE FROM dbo.MyTable WHERE (c1 = '0000001' AND c2 = 'A000001');
DELETE FROM dbo.MyTable WHERE (c1 = '0000002' AND c2 = 'A000002');
DELETE FROM dbo.MyTable WHERE (c1 = '0000003' AND c2 = 'A000003');
/* ... refactored, individual DELETE statements omitted for simplicity  */

Vedere anche

AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL)
CAST e CONVERT (Transact-SQL)
COALESCE (Transact-SQL)
Conversione di tipi di dati (motore di database)
Precedenza dei tipi di dati (Transact-SQL)
Tipi di dati (Transact-SQL)
Funzioni predefinite (Transact-SQL)
LIKE (Transact-SQL)
NULLIF (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)