Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如果SQL Server案例值为NULL,则不返回任何内容_Sql Server_Function_Sql Server 2008_Table Valued Parameters - Fatal编程技术网

Sql server 如果SQL Server案例值为NULL,则不返回任何内容

Sql server 如果SQL Server案例值为NULL,则不返回任何内容,sql-server,function,sql-server-2008,table-valued-parameters,Sql Server,Function,Sql Server 2008,Table Valued Parameters,我有一个函数,它根据特定条件返回一列多行数据 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 = @F

我有一个函数,它根据特定条件返回一列多行数据

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
)
当桌上有水果和蔬菜的价值时,一切都很好。但是,如果前两种情况的值不存在,则返回的输出(来自最后3个查询)是


有没有一种方法可以避免这些空值,并且不返回与前两个查询类似的任何内容。

使用COALESCE替换空值


使用合并替换空值


我绝不希望这是一个确定的答案,我发布这篇文章只是为了向您展示对您上述评论的回答:

 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

我决不希望这是一个确定的答案,我发布这篇文章只是为了向您展示对您上述评论的回答:

 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

您将所有结果合并在一起,因此您可以将您拥有的内容放入子查询中,然后使用where子句查询这些结果以过滤空值,有很多更好的方法,但为了巩固你的成果…@RyanWilson你能告诉我如何使用外部查询过滤空值吗?我发布了一个答案,作为如何使用外部查询的示例。你将所有结果合并在一起,这样你就可以将你拥有的内容生成子查询,然后使用where子句查询这些结果以过滤空值,有很多更好的方法,但只是为了建立你所得到的…@RyanWilson你能告诉我如何使用外部查询过滤空值吗?发布了一个答案作为如何使用外部查询的示例。RyanWilson是正确的。有更好的方法可以做到这一点。加上1对你来说@kalaolaniRyan Wilson是正确的。有更好的方法可以做到这一点。加上你的1@kalaolani
...
SELECT 'Fruit Exists'
WHERE EXISTS(Select 1 FROM Fruits WHERE FruitID = @FruitId)
...