gpt4 book ai didi

sql-server - 为什么 T-SQL 排名值返回可为空的列?

转载 作者:行者123 更新时间:2023-12-02 11:32:27 25 4
gpt4 key购买 nike

使用T-SQL的排名函数时,包含排名值的列可以为空。

您可以在创建结果集 View 时看到这一点:

CREATE VIEW v
AS
SELECT Name
, ListPrice
, RANK() OVER (ORDER BY ListPrice DESC) AS [Rank]
, DENSE_RANK() OVER (ORDER BY ListPrice DESC) AS [DenseRank]
, ROW_NUMBER() OVER (ORDER BY ListPrice DESC) AS [RowNumber]
FROM Production.Product

为此 View 执行 sp_help 表明使用排名函数的列可为空:

EXEC sp_help 'v'

Column_name (...) | Nullable
---------------...-+------------+
... (...) | ...
Rank (...) | Yes
DenseRank (...) | Yes
RowNumber (...) | Yes

哪种情况会导致排名函数返回 NULL

最佳答案

View 中每个基于计算/函数的列似乎都可以为空。例如:

create view v1
as
select OBJECT_ID,OBJECT_ID * 1 as obj2 from sys.objects
go
EXEC sp_help 'v1'

表示 object_id 不可为空,但 obj2 可以为空,即使可以简单地观察到 if object_id 永远不能为空,也不能为空obj2

我知道(不确定这是否是您真正想要的)强制列看起来不可为空的唯一方法是将其包装在 ISNULL 中:

create view v2
as
select OBJECT_ID,ISNULL(OBJECT_ID * 1,0) as obj2 from sys.objects
go
EXEC sp_help 'v2'

有趣的是,这是少数几个不能使用 COALESCE 而不是 ISNULL 的地方之一:

create view v3
as
select OBJECT_ID,COALESCE(OBJECT_ID * 1,0) as obj2 from sys.objects
go
EXEC sp_help 'v3'

v3 类似于 v1

关于sql-server - 为什么 T-SQL 排名值返回可为空的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com