Выражения (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в 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 */
Связанный контент
- AT TIME ZONE (Transact-SQL)
- CASE (Transact-SQL)
- CAST и CONVERT (Transact-SQL)
- COALESCE (Transact-SQL)
- Преобразование типов данных (ядро СУБД)
- Приоритет типа данных (Transact-SQL)
- Типы данных (Transact-SQL)
- Что такое функции базы данных SQL?
- LIKE (Transact-SQL)
- NULLIF (Transact-SQL)
- SELECT (Transact-SQL)
- WHERE (Transact-SQL)