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替代”。
有什么东西在发生吗?我失踪了?
答案 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
)