如果 SQL 服务器 CASE 值为 NULL,则不 return 任何内容
To not return anything if SQL Server CASE value is NULL
我有一个函数,可以根据特定条件 return 将多行数据与一列合并。
ALTER FUNCTION [dbo].[GetFavoriteFruits]
(
@FruitId uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
Select Name FROM Fruits WHERE FruitID = @FruitId
UNION ALL
Select Name FROM Vegetables WHERE VegetableID = @FruitId
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) THEN 'Fruit Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Vegetable Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) OR EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Either Fruit or Vegetable exists'
END
)
当 table 中有 Fruits 和 Vegetable 的值时,一切都很好。但是,如果前两种情况的值不存在,则输出 returned(来自最后 3 个查询)是
NULL
NULL
NULL
有什么方法可以避免那些 NULL 和 return 与前两个查询没有任何相似之处。
使用 COALESCE 替换 NULL 值。
https://msdn.microsoft.com/en-us/library/ms190349(v=sql.110).aspx
我绝不期望这是已确认的答案,我发布此内容只是为了向您展示对上述评论的答复:
ALTER FUNCTION [dbo].[GetFavoriteFruits]
(
@FruitId uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
SELECT x.Name FROM (
Select Name FROM Fruits WHERE FruitID = @FruitId
UNION ALL
Select Name FROM Vegetables WHERE VegetableID = @FruitId
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) THEN 'Fruit Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Vegetable Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) OR EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Either Fruit or Vegetable exists'
END
) ) AS x
WHERE x.Name IS NOT NULL
...
SELECT 'Fruit Exists'
WHERE EXISTS(Select 1 FROM Fruits WHERE FruitID = @FruitId)
...
我有一个函数,可以根据特定条件 return 将多行数据与一列合并。
ALTER FUNCTION [dbo].[GetFavoriteFruits]
(
@FruitId uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
Select Name FROM Fruits WHERE FruitID = @FruitId
UNION ALL
Select Name FROM Vegetables WHERE VegetableID = @FruitId
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) THEN 'Fruit Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Vegetable Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) OR EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Either Fruit or Vegetable exists'
END
)
当 table 中有 Fruits 和 Vegetable 的值时,一切都很好。但是,如果前两种情况的值不存在,则输出 returned(来自最后 3 个查询)是
NULL
NULL
NULL
有什么方法可以避免那些 NULL 和 return 与前两个查询没有任何相似之处。
使用 COALESCE 替换 NULL 值。
https://msdn.microsoft.com/en-us/library/ms190349(v=sql.110).aspx
我绝不期望这是已确认的答案,我发布此内容只是为了向您展示对上述评论的答复:
ALTER FUNCTION [dbo].[GetFavoriteFruits]
(
@FruitId uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
SELECT x.Name FROM (
Select Name FROM Fruits WHERE FruitID = @FruitId
UNION ALL
Select Name FROM Vegetables WHERE VegetableID = @FruitId
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) THEN 'Fruit Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Vegetable Exists'
END
UNION ALL
Select
CASE
WHEN EXISTS(Select Name FROM Fruits WHERE FruitID = @FruitId) OR EXISTS(Select Name FROM Vegetables WHERE VegetableID = @FruitId) THEN 'Either Fruit or Vegetable exists'
END
) ) AS x
WHERE x.Name IS NOT NULL
...
SELECT 'Fruit Exists'
WHERE EXISTS(Select 1 FROM Fruits WHERE FruitID = @FruitId)
...