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

Применимо к: даSQL Server (все поддерживаемые версии) ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics даПараллельное хранилище данных

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

Значок ссылки на раздел Синтаксические обозначения в 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 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

Термин Определение
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 AdventureWorks2012;  
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)