Espressioni (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Combinazione di simboli e operatori che sql Server motore di database valuta per ottenere 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.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

Sintassi per SQL Server e database SQL di Azure.

{ constant | scalar_function | [ table_name. ] column | variable
    | ( expression ) | ( scalar_subquery )
    | { unary_operator } expression
    | expression { binary_operator } expression
    | ranking_windowed_function | aggregate_windowed_function
}

Sintassi per Azure Synapse Analytics e 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 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

constant

Simbolo che rappresenta un singolo valore di dati specifico. Per altre informazioni, vedere Costanti.

scalar_function

Unità di sintassi Transact-SQL che fornisce un servizio specifico e restituisce un singolo valore. scalar_function possono essere funzioni scalari predefinite, ad esempio SUMfunzioni , GETDATE()o CAST o funzioni scalari definite dall'utente.

table_name

Nome o alias di una tabella.

column

Nome di una colonna. In un'espressione è consentito soltanto il nome della colonna.

variable

Nome di una variabile o di un parametro. Per ulteriori informazioni, vedere DECLARE @local_variable.

expression

Qualsiasi espressione valida come definito in questo articolo. 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 di uno

binary_operator

Operatore che definisce il modo in cui due espressioni vengono combinate per produrre un singolo 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 di stringhe (+) o un operatore unario. Per altre informazioni sugli operatori, vedere Operatori.

ranking_windowed_function

Qualsiasi funzione di classificazione Transact-SQL. Per altre informazioni, vedere Funzioni di classificazione.

aggregate_windowed_function

Qualsiasi funzione di aggregazione Transact-SQL con la clausola OVER. Per altre informazioni, vedere clausola SELECT - OVER.

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 combinate usando operatori logici o di confronto, il tipo di dati risultante è Boolean e il valore è , TRUEFALSEo UNKNOWN. Per altre informazioni sui tipi di dati booleani, vedere Operatori di confronto.

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.

Osservazioni:

Due espressioni possono essere combinate da un operatore se hanno entrambi tipi di dati supportati dall'operatore e almeno una di queste condizioni è 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 queste condizioni, è possibile usare le CAST funzioni o CONVERT . Usare CAST o CONVERT per convertire in modo esplicito il tipo di dati con la precedenza inferiore nel tipo di dati con precedenza superiore o in un tipo di dati intermedio che può essere convertito in modo implicito nel tipo di dati con precedenza superiore.

Se non è supportata alcuna conversione implicita o 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, si veda Precedenza delle regole di confronto.

In un linguaggio di programmazione come C o Microsoft Visual Basic, un'espressione restituisce sempre un singolo risultato. Le espressioni in un elenco di selezione di Transact-SQL seguono una variante di questa regola, ovvero vengono valutate singolarmente per ogni riga del set di risultati. Una singola espressione può avere un valore diverso in ogni riga del set di risultati, ma ogni riga ha 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 AdventureWorks2022;
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, per cui nessun thread può usare tutta la memoria. Una parte di questa memoria viene usata per archiviare le espressioni delle query. Se una query ha troppe espressioni e la memoria necessaria supera il limite interno, il motore non lo esegue. 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  */