Поделиться через


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

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

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

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

Синтаксис

Синтаксис ДЛЯ SQL Server и База данных SQL Azure.

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

Синтаксис для Azure Synapse Analytics и параллельного хранилища данных.

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

Аргументы

constant

Символ, представляющий одно, определенное значение данных. Дополнительные сведения см. в разделе Константы.

scalar_function

Единица синтаксиса Transact-SQL, которая предоставляет определенную службу и возвращает одно значение. scalar_function могут быть встроенными скалярными функциями, такими как SUM, GETDATE()или функции, или CAST скалярные пользовательские функции.

table_name

Имя или псевдоним таблицы.

column

Имя столбца. Только имя столбца используется в выражении.

variable

Имя переменной или параметра. Дополнительные сведения см. в разделе DECLARE @local_variable.

выражение

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

scalar_subquery

Вложенный запрос, возвращающий одно значение. Например:

SELECT MAX(UnitPrice)
FROM Products;

unary_operator

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

  • + указывает положительное число
  • - указывает отрицательное число
  • ~ указывает оператор дополнения одного

binary_operator

Оператор, определяющий способ объединения двух выражений для получения одного результата. binary_operator может быть арифметическим оператором, оператором назначения (=), побитовым оператором, оператором сравнения, логическим оператором, оператором объединения строк (+) или унарным оператором. Дополнительные сведения об операторах см. в разделе "Операторы".

ranking_windowed_function

Любая функция ранжирования Transact-SQL. Дополнительные сведения см. в разделе "Ранжирование функций".

aggregate_windowed_function

Любая агрегатная функция Transact-SQL с предложением OVER. Дополнительные сведения см. в предложении SELECT - OVER.

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

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

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

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

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

Замечания

Два выражения могут объединяться оператором, если оба они имеют типы данных, поддерживаемые оператором, и по крайней мере одно из этих условий имеет значение true:

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

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

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

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

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

На языке программирования, например 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  */