适用于: SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric 中的 SQL 分析端点
Microsoft Fabric 中的仓库
按顺序计算变量并返回最初不等于 的第一个表达式的当前值。 例如, 返回第三个值,因为第三个值是首个为非 Null 的值。
Transact-SQL 语法约定
expression
是任何类型的表达式。
返回数据类型优先级最高的 expression 的数据类型 。 如果所有表达式都不可为 Null,则结果的类型也不可为 Null。
如果所有参数都为 ,则 返回 。 至少应有一个 Null 值为 类型。
表达式是 表达式的语法快捷方式。 即查询优化器将代码 (expression1,...n) 重写为以下 表达式:
因此,输入值(expression1、expression2、expressionN 等)会被计算多次。 包含子查询的值表达式被视为不确定的且子查询会被计算两次。 此结果符合 SQL 标准。 在每种情况中,第一次计算和后续计算可能返回不同的结果。
例如,执行代码 时,计算子查询两次。 因此,您可能得到不同的结果,具体取决于查询的隔离级别。 例如,在多用户环境中,代码在 隔离级别下可能返回 。 要确保返回稳定的结果,请使用 隔离级别,或使用 函数替换 。 此外,可以重写查询以将子查询推送到嵌套 select,如以下示例中所示:
函数和 表达式具有相似的用途,但是行为可能不同。
- 因为 是函数,它只能被计算一次。 如上所述,可以多次计算 表达式的输入值。
- 确定结果表达式的数据类型方式不同。 使用第一个参数的数据类型, 则遵循 表达式规则并返回具有最高优先级的值的数据类型。
- 结果表达式是否可为 NULL 对于 和 是不同的。 返回值始终被视为不可为 NULL(假定返回值不可为 null)。 相反,具有非 null 参数的 被视为可以为 。 因此,尽管表达式 和 是等效的,但其在结果是否为 null 值方面是不同的。 如果正在计算列中使用这些表达式、创建键约束或生成标量 UDF 确定性的返回值以便可以编制索引,这些值可能会带来不同结果,如以下示例中所示:
- 和 的验证也不同。 例如,可以将 的 值转换为 int;而对于 ,则必须提供数据类型。
- 仅采用两个参数。 与此相反, 采用可变数量的参数。
下面的示例演示 如何从第一个具有非 Null 值的列中选择数据。 该示例使用 AdventureWorks2022 数据库。
在以下示例中, 表中包括以下三列,它们包含有关雇员的年薪的信息:hourly wage、salary 和 commission。 但是,每个雇员只能接受一种付款方式。 若要确定支付给所有雇员的金额总数,请使用 仅接受在 、 和 中找到的非 Null 值。
结果集如下。
下面的示例演示 如何从第一个具有非 Null 值的列中选择数据。 对于此示例,假定 表包含此数据:
然后,我们运行以下 COALESCE 查询:
结果集如下。
请注意,在第一行中, 值是 ,而不是 。 此值之所以这样是因为示例中未将 列指定为 的参数。
以下示例使用 来比较三个列中的值,并仅返回列中找到的非 null 值。
结果集如下。
到此这篇增删改查sql语句面试(增删改查sql语句内容)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/14051.html