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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Сочетание символов и операторов, используемое компонентом Компонент SQL Server Database EngineSQL Server Database Engine для вычисления одиночного значения данных.Is a combination of symbols and operators that the Компонент SQL Server Database EngineSQL Server Database Engine evaluates to obtain a single data value. Отдельные константы, переменные, столбцы и скалярные функции являются примерами простых выражений.Simple expressions can be a single constant, variable, column, or scalar function. Для соединения двух и более простых выражений в одно сложное можно использовать операторы.Operators can be used to join two or more simple expressions into a complex expression.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- 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 SQL Data Warehouse 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 ]  
  

АргументыArguments

ТерминTerm ОпределениеDefinition
constantconstant Символ, представляющий одно конкретное значение данных.Is a symbol that represents a single, specific data value. Дополнительные сведения см. в статье Константы (Transact-SQL).For more information, see Constants (Transact-SQL).
scalar_functionscalar_function Единица синтаксиса Transact-SQLTransact-SQL, который предоставляет определенную службу и возвращает одиночное значение.Is a unit of Transact-SQLTransact-SQL syntax that provides a specific service and returns a single value. scalar_function может быть встроенной скалярной функцией, такой как SUM, GETDATE или CAST, либо определяемыми пользователем скалярными функциями.scalar_function can be built-in scalar functions, such as the SUM, GETDATE, or CAST functions, or scalar user-defined functions.
[ table_name .[ table_name. ]] Имя или псевдоним таблицы.Is the name or alias of a table.
columncolumn Имя столбца.Is the name of a column. Только имя столбца используется в выражении.Only the name of the column is allowed in an expression.
variablevariable Имя переменной или параметр.Is the name of a variable, or parameter. Дополнительные сведения см. в статье DECLARE @local_variable (Transact-SQL).For more information, see DECLARE @local_variable (Transact-SQL).
( expression )( expression ) Любое допустимое выражение из определенных в этом разделе.Is any valid expression as defined in this topic. Скобки являются операторами группировки, гарантирующими, что все операторы выражения внутри скобок будут выполнены, прежде чем результирующее выражение будет объединено с другим.The parentheses are grouping operators that make sure that all the operators in the expression within the parentheses are evaluated before the resulting expression is combined with another.
( scalar_subquery )( scalar_subquery ) Вложенный запрос, возвращающий одиночное значение.Is a subquery that returns one value. Пример:For example:

SELECT MAX(UnitPrice)

FROM Products
{ unary_operator }{ unary_operator } Унарные операторы можно применять только к выражениям, выполняемым с любыми типами данных из категории числовых типов данных.Unary operators can be applied only to expressions that evaluate to any one of the data types of the numeric data type category. Оператор, имеющий только один числовой операнд:Is an operator that has only one numeric operand:

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

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

~ обозначает оператор дополнения.~ indicates the one's complement operator.
{ binary_operator }{ binary_operator } Этот оператор указывает, как объединяются два выражения для получения единого результата.Is an operator that defines the way two expressions are combined to yield a single result. Аргумент binary_operator может быть арифметическим, логическим, битовым или унарным оператором, а также оператором присвоения (=), сравнения или объединения (+).binary_operator can be an arithmetic operator, the assignment operator (=), a bitwise operator, a comparison operator, a logical operator, the string concatenation operator (+), or a unary operator. Дополнительные сведения об операторах см. в разделе Операторы (Transact-SQL).For more information about operators, see Operators (Transact-SQL).
ranking_windowed_functionranking_windowed_function Любая ранжирующая функция языка Transact-SQLTransact-SQL.Is any Transact-SQLTransact-SQL ranking function. Дополнительные сведения см. в разделе Ранжирующие функции (Transact-SQL).For more information, see Ranking Functions (Transact-SQL).
aggregate_windowed_functionaggregate_windowed_function Любая агрегатная функция языка Transact-SQLTransact-SQL, содержащая предложение OVER.Is any Transact-SQLTransact-SQL aggregate function with the OVER clause. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).

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

Для простых выражений, состоящих из одной константы, переменной, скалярной функции или имени столбца, в качестве типа данных, параметров сортировки, числа разрядов, точности и значения выражения используются тип данных, параметры сортировки, число разрядов, точность и значение элемента, на который они ссылаются.For a simple expression made up of a single constant, variable, scalar function, or column name: the data type, collation, precision, scale, and value of the expression is the data type, collation, precision, scale, and value of the referenced element.

При объединении двух выражений с помощью операторов сравнения или логических операторов результат будет иметь логический тип данных и может принимать одно из следующих значений: TRUE, FALSE или UNKNOWN.When two expressions are combined by using comparison or logical operators, the resulting data type is Boolean and the value is one of the following: TRUE, FALSE, or UNKNOWN. Дополнительные сведения о логических типах данных см. в разделе Операторы сравнения (Transact-SQL).For more information about Boolean data types, see Comparison Operators (Transact-SQL).

При объединении двух выражений с помощью арифметических, побитовых или строковых операторов тип данных результата определяется используемым оператором.When two expressions are combined by using arithmetic, bitwise, or string operators, the operator determines the resulting data type.

Сложные выражения, составленные из нескольких символов и операторов, вычисляются в одиночные результаты.Complex expressions made up of many symbols and operators evaluate to a single-valued result. Тип данных, параметры сортировки, точность и значение результирующего выражения определяются объединением составляющих выражений (по два за один раз) до тех пор, пока не будет получен конечный результат.The data type, collation, precision, and value of the resulting expression is determined by combining the component expressions, two at a time, until a final result is reached. Последовательность, в которой эти выражения объединяются, зависит от приоритета операторов в выражении.The sequence in which the expressions are combined is defined by the precedence of the operators in the expression.

RemarksRemarks

Два выражения можно объединить каким-либо оператором, если оба они относятся к типам данных, поддерживаемым оператором, и выполняется хотя бы одно из следующих условий.Two expressions can be combined by an operator if they both have data types supported by the operator and at least one of these conditions is true:

  • Выражения относятся к одному типу данных.The expressions have the same data type.

  • Тип данных с более низким приоритетом может быть неявно преобразован в тип данных с более высоким приоритетом.The data type with the lower precedence can be implicitly converted to the data type with the higher data type precedence.

Если выражения не удовлетворяют этим условиям, функция CAST или CONVERT явным образом преобразует тип данных с более низким приоритетом или в тип данных с более высоким приоритетом, или в промежуточный тип данных, который затем может быть неявно преобразован в тип данных с более высоким приоритетом.If the expressions do not meet these conditions, the CAST or CONVERT functions can be used to explicitly convert the data type with the lower precedence to either the data type with the higher precedence or to an intermediate data type that can be implicitly converted to the data type with the higher precedence.

Если неявное или явное преобразование не поддерживается, эти два выражения объединить невозможно.If there is no supported implicit or explicit conversion, the two expressions cannot be combined.

Параметры сортировки любого выражения, результатом которого является символьная строка, определяются правилами очередности параметров сортировки.The collation of any expression that evaluates to a character string is set by following the rules of collation precedence. Дополнительные сведения см. в статье Очередность параметров сортировки (Transact-SQL).For more information, see Collation Precedence (Transact-SQL).

В языке программирования, таком как C или MicrosoftMicrosoft Visual BasicVisual Basic, вычисление выражения всегда приводит к получению единственного результата.In a programming language such as C or MicrosoftMicrosoft Visual BasicVisual Basic, an expression always evaluates to a single result. Выражения в списке выбора инструкции языка Transact-SQLTransact-SQL подчиняются правилу, из которого следует, что выражение применяется отдельно к каждой строке в результирующем наборе.Expressions in a Transact-SQLTransact-SQL select list follow a variation on this rule: The expression is evaluated individually for each row in the result set. У отдельных выражений могут быть различные значения в каждой строке результирующего набора, но у каждой строки имеется только одно значение для выражения.A single expression may have a different value in each row of the result set, but each row has only one value for the expression. Например, в следующей инструкции SELECT выражениями являются как ссылка на ProductID, так и значение 1+2 в списке выбора:For example, in the following SELECT statement both the reference to ProductID and the term 1+2 in the select list are expressions:

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

Выражение 1+2 дает результат 3 в каждой строке результирующего набора.The expression 1+2 evaluates to 3 in each row in the result set. Несмотря на то, что выражение ProductID формирует уникальное значение для каждой строки в результирующем наборе, в каждой строке содержится только одно значение для ProductID.Although the expression ProductID generates a unique value in each result set row, each row only has one value for ProductID.

  • Хранилище данных SQL Azure выделяет фиксированный максимальный объем памяти для каждого потока, чтобы ни один поток не мог использовать всю память.Azure SQL Data Warehouse allocates a fixed maximum amount of memory to each thread so no thread can use up all the memory. Часть этой памяти используется для хранения выражений запросов.Some of this memory is used for storing queries’ expressions. Если запрос содержит слишком много выражений и требуемая память превышает внутреннее ограничение, подсистема не будет выполнять его.If a query has too many expressions and its required memory exceeds the internal limit, the engine will not execute it. Чтобы избежать этой проблемы, пользователь может разделить запрос на несколько запросов с меньшим количеством выражений в каждом.To avoid this problem, users can change the query into multiple queries with smaller number of expressions in each. Например, имеется запрос с длинным списком выражений в предложении WHERE:For example, you have a query with a long list of expressions in the WHERE clause:
DELETE FROM dbo.MyTable 
WHERE
(c1 = '0000001' AND c2 = 'A000001') or
(c1 = '0000002' AND c2 = 'A000002') or
(c1 = '0000003' AND c2 = 'A000003') or
...

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

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');
...

См. также:See Also

AT TIME ZONE (Transact-SQL) AT TIME ZONE (Transact-SQL)
CASE (Transact-SQL) CASE (Transact-SQL)
Функции CAST и CONVERT (Transact-SQL) CAST and CONVERT (Transact-SQL)
COALESCE (Transact-SQL) COALESCE (Transact-SQL)
Преобразование типов данных (ядро СУБД) Data Type Conversion (Database Engine)
Приоритет типов данных (Transact-SQL) Data Type Precedence (Transact-SQL)
Типы данных (Transact-SQL) Data Types (Transact-SQL)
Встроенные функции (Transact-SQL) Built-in Functions (Transact-SQL)
LIKE (Transact-SQL) LIKE (Transact-SQL)
NULLIF (Transact-SQL) NULLIF (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)