0

这是使用以下语句的帖子

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 替换”。

有什么我想念的吗?

4

1 回答 1

2

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

我认为意图是:

return (select (case when count(*) = 0 then 0 else 1 end)
        from Vehicle
        where vin = @vin and vehicle_type = @vehicle_type
       )
于 2012-12-04T22:36:50.577 回答