Выражения (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

Сочетание символов и операторов, которые ядро СУБД SQL Server, оцениваются для получения одного значения данных. Отдельные константы, переменные, столбцы и скалярные функции являются примерами простых выражений. Для соединения двух и более простых выражений в одно сложное можно использовать операторы.

Соглашения о синтаксисе Transact-SQL

Синтаксис

-- 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 ]  
  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

Термин Определение
constant Символ, представляющий одно конкретное значение данных. Дополнительные сведения см. в статье Константы (Transact-SQL).
scalar_function Единица синтаксиса Transact-SQL, который предоставляет определенную службу и возвращает одиночное значение. scalar_function может быть встроенной скалярной функцией, такой как SUM, GETDATE или CAST, либо определяемыми пользователем скалярными функциями.
[ table_name. ] Имя или псевдоним таблицы.
column Имя столбца. Только имя столбца используется в выражении.
variable Имя переменной или параметр. Дополнительные сведения см. в разделе DECLARE @local_variable (Transact-SQL).
(expression) Любое допустимое выражение из определенных в этом разделе. Скобки являются операторами группировки, гарантирующими, что все операторы выражения внутри скобок будут выполнены, прежде чем результирующее выражение будет объединено с другим.
(scalar_subquery) Вложенный запрос, возвращающий одиночное значение. Например:

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator } Унарные операторы можно применять только к выражениям, выполняемым с любыми типами данных из категории числовых типов данных. Оператор, имеющий только один числовой операнд:

+ обозначает положительное число.

- обозначает отрицательное число.

~ обозначает оператор дополнения.
{ binary_operator } Этот оператор указывает, как объединяются два выражения для получения единого результата. Аргумент binary_operator может быть арифметическим, логическим, битовым или унарным оператором, а также оператором присвоения (=), сравнения или объединения (+). Дополнительные сведения об операторах см. в статье Операторы (Transact-SQL).
ranking_windowed_function Любая ранжирующая функция Transact-SQL. Дополнительные сведения см. в статье Ранжирующие функции (Transact-SQL).
aggregate_windowed_function Любая агрегатная функция Transact-SQL с предложением OVER. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).

Результаты выражения

Для простых выражений, состоящих из одной константы, переменной, скалярной функции или имени столбца, в качестве типа данных, параметров сортировки, числа разрядов, точности и значения выражения используются тип данных, параметры сортировки, число разрядов, точность и значение элемента, на который они ссылаются.

При объединении двух выражений с помощью операторов сравнения или логических операторов результат будет иметь логический тип данных и может принимать одно из следующих значений: TRUE, FALSE или UNKNOWN. Дополнительные сведения о логических типах данных см. в статье Операторы сравнения (Transact-SQL).

При объединении двух выражений с помощью арифметических, побитовых или строковых операторов тип данных результата определяется используемым оператором.

Сложные выражения, составленные из нескольких символов и операторов, вычисляются в одиночные результаты. Тип данных, параметры сортировки, точность и значение результирующего выражения определяются объединением составляющих выражений (по два за один раз) до тех пор, пока не будет получен конечный результат. Последовательность, в которой эти выражения объединяются, зависит от приоритета операторов в выражении.

Замечания

Два выражения можно объединить каким-либо оператором, если оба они относятся к типам данных, поддерживаемым оператором, и выполняется хотя бы одно из следующих условий.

  • Выражения относятся к одному типу данных.

  • Тип данных с более низким приоритетом может быть неявно преобразован в тип данных с более высоким приоритетом.

Если выражения не удовлетворяют этим условиям, функция CAST или CONVERT явным образом преобразует тип данных с более низким приоритетом или в тип данных с более высоким приоритетом, или в промежуточный тип данных, который затем может быть неявно преобразован в тип данных с более высоким приоритетом.

Если неявное или явное преобразование не поддерживается, эти два выражения объединить невозможно.

Параметры сортировки любого выражения, результатом которого является символьная строка, определяются правилами очередности параметров сортировки. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).

На языке программирования, например C или Microsoft Visual Basic, выражение всегда оценивается одним результатом. Выражения в списке выбора Transact-SQL подчиняются следующему варианту этого правила: выражение вычисляется отдельно для каждой строки в результирующем наборе. У отдельных выражений могут быть различные значения в каждой строке результирующего набора, но у каждой строки имеется только одно значение для выражения. Например, в следующей инструкции SELECT выражениями являются как ссылка на ProductID, так и значение 1+2 в списке выбора:

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

Выражение 1+2 дает результат 3 в каждой строке результирующего набора. Несмотря на то, что выражение ProductID формирует уникальное значение для каждой строки в результирующем наборе, в каждой строке содержится только одно значение для ProductID.

  • Azure Synapse Analytics выделяет фиксированный максимальный объем памяти для каждого потока, чтобы поток не мог использовать всю память. Некоторые из этих операций используются для хранения выражений запросов. Если запрос содержит слишком много выражений и требуемая память превышает внутреннее ограничение, подсистема не будет выполнять его. Чтобы избежать этой проблемы, пользователь может разделить запрос на несколько запросов с меньшим количеством выражений в каждом. Например, имеется запрос с длинным списком выражений в предложении 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 */

Измените этот запрос следующим образом:

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  */

См. также

AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL)
CAST и CONVERT (Transact-SQL)
COALESCE (Transact-SQL)
Преобразование типов данных (ядро СУБД)
Приоритет типов данных (Transact-SQL)
Типы данных (Transact-SQL)
Встроенные функции (Transact-SQL)
LIKE (Transact-SQL)
NULLIF (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)