表达式(Transact-SQL)

符号和运算符的一种组合,SQL Server 数据库引擎将计算该组合以获得单个数据值。简单表达式可以是一个常量、变量、列或标量函数。可以用运算符将两个或更多的简单表达式联接起来组成复杂表达式。

主题链接图标Transact-SQL 语法约定

语法

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

参数

术语

定义

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)

表达式结果

对于由单个常量、变量、标量函数或列名组成的简单表达式,其数据类型、排序规则、精度、小数位数和值就是它所引用的元素的数据类型、排序规则、精度、小数位数和值。

用比较运算符或逻辑运算符组合两个表达式时,生成的数据类型为 Boolean,并且值为下列类型之一:TRUE、FALSE 或 UNKNOWN。有关 Boolean 数据类型的详细信息,请参阅比较运算符 (Transact-SQL)

用算术运算符、位运算符或字符串运算符组合两个表达式时,生成的数据类型取决于运算符。

由多个符号和运算符组成的复杂表达式的计算结果为单值结果。生成的表达式的数据类型、排序规则、精度和值由进行组合的两个表达式决定,并按每次两个表达式的顺序递延,直到得出最后结果。表达式中元素组合的顺序由表达式中运算符的优先级决定。

注释

两个表达式可以由一个运算符组合起来,只要它们具有该运算符支持的数据类型,并且满足至少下列一个条件:

  • 两个表达式有相同的数据类型。

  • 优先级低的数据类型可以隐式转换为优先级高的数据类型。

如果表达式不满足这些条件,则可以使用 CAST 或 CONVERT 函数将优先级低的数据类型显式转化为优先级高的数据类型,或者转换为一种可以隐式转化成优先级高的数据类型的中间数据类型。

如果没有支持的隐式或显式转换,则两个表达式将无法组合。

任何计算结果为字符串的表达式的排序规则都应遵循排序规则优先顺序规则。有关详细信息,请参阅排序规则优先级 (Transact-SQL)

在 C 或 Microsoft Visual Basic 这类编程语言中,表达式的计算结果始终为单值结果。Transact-SQL 选择列表中的表达式按以下规则进行变体:分别对结果集中的每一行计算表达式的值。同一个表达式对结果集内的每一行可能会有不同的值,但该表达式在每一行的值是唯一的。例如,在 SELECT 语句中,对 ProductID 的引用以及选择列表中的术语 1+2 都是表达式:

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

结果集中的每个行的表达式 1+2 的计算结果都为 3。虽然表达式 ProductID 在结果集的每一行中产生一个唯一值,但每一行只有一个 ProductID 值。