没有返回行时使用coalesce函数

时间:2012-12-04 22:32:38

标签: sql

Here's a post that uses the following statement

CREATE FUNCTION ValidateExclVehicle_check (
 @vin           CHAR(17),
 @vehicle_type  CHAR(3)
)
RETURNS TINYINT
AS
-- Exists     = 1
-- Not Exists = Null, 0 substituted
RETURN ( 
SELECT COALESCE(1, 0)
 FROM  Vehicle
 WHERE vin          = @vin
 AND   vehicle_type = @vehicle_type 
)

我不明白为什么表达式COALESCE(1,0)会返回除1之外的任何内容,除非where子句没有返回任何行,在这种情况下整个语句不返回任何行和coalesce表达式的值是无关紧要的。我没有看到“0替代”。

有什么东西在发生吗?我失踪了?

1 个答案:

答案 0 :(得分:2)

我同意你的看法。该语句应该返回1或NULL / no行。这可能是一个特定于数据库的现象,假设您确实看到它返回0。

我认为目的是:

return (select (case when count(*) = 0 then 0 else 1 end)
        from Vehicle
        where vin = @vin and vehicle_type = @vehicle_type
       )