子查询中的COALESCE仍返回DBnull

时间:2013-07-05 22:42:36

标签: sql sql-server coalesce

不幸的是,我今天面临另一个我不明白的错误。 我正在从我的数据库中选择下一个和上一个id,我正在使用COALESCE用数字替换空值。 但由于某种原因它仍然返回null,我错过了什么?

"Select Gags.Title, Gags.DatePosted, Gags.Image, Users.Username, (Select Top(1) COALESCE(Id, 0) from Gags where Id > " + IdModel.Id + "), (Select Top(1) COALESCE(Id, 0) from Gags where Id < " + IdModel.Id + ") From Gags Inner Join Users on Gags.Userid = Users.Id where Gags.Id = " + IdModel.Id + "

修正查询:

Select Gags.Title, Gags.DatePosted, Gags.Image, Users.Username, isnull((Select Top(1) id from Gags where Id > " + IdModel.Id + "),-1), Isnull((Select Top(1) id from Gags where Id < " + IdModel.Id + "), -1) From Gags Inner Join Users on Gags.Userid = Users.Id where Gags.Id = " + IdModel.Id + "

我在谈论两个子查询。

提前致谢!

今天这是一个糟糕的节目日......

1 个答案:

答案 0 :(得分:4)

对于空行集,不会调用coalesce

(select top 1 coalesce(Id, 0) from ...)

标量上下文中的空行集返回null

select (select 1 where 1=0)
-->
NULL

一种解决方案是将coalesce移到子查询之外:

coalesce((select top 1 Id from ...),0)