Sql server SQL Server如果为Null,则返回所有内容

Sql server SQL Server如果为Null,则返回所有内容,sql-server,stored-procedures,Sql Server,Stored Procedures,我正在尝试找出这个存储过程 ALTER procedure [dbo].[GetTotals] @Service nvarchar(50), @Country nvarchar(50) = NULL, @Region nvarchar(50) = NULL as SELECT CASE @Service WHEN 'Army' THEN Sum(Army) WHEN 'Navy' THEN Sum(Navy) When 'Marine_Corps' then

我正在尝试找出这个存储过程

ALTER procedure [dbo].[GetTotals]

@Service nvarchar(50),
@Country nvarchar(50)  = NULL,
@Region nvarchar(50) = NULL

as 

SELECT
  CASE @Service
    WHEN 'Army' THEN Sum(Army)
    WHEN 'Navy' THEN Sum(Navy)
    When 'Marine_Corps' then Sum(Marine_Corps)
    When 'Air_Force' then Sum(Air_Force)
    ELSE NULL
  END      as "ServiceTotal"

FROM
  All_Records

WHERE Country = CASE WHEN @Country IS NOT NULL THEN @Country ELSE Country END
  AND Region = CASE WHEN @Region IS NOT NULL THEN @Region ELSE Region END
我想要的是,如果
@Country
不为空,则返回记录
其中Country=@Country
,否则返回所有国家。我希望
区域
具有相同的行为

我已经试过了,否则不为空,否则=空,否则为空

但一切都不起作用

编辑:

我想出来了。我只是没有正确调用程序。它正在工作。我必须调用名为GetTotals的过程,如下所示:

WHERE COALESCE(@Country,Country) = Country AND COALESCE(@Region,Region) = Region
  • GetTotals海军,空,欧洲这将返回整个欧洲的海军总数
  • 这将返回阿尔巴尼亚海军的总数

这通常是这样做的:

WHERE COALESCE(@Country,Country) = Country AND COALESCE(@Region,Region) = Region

这通常是这样做的:

WHERE COALESCE(@Country,Country) = Country AND COALESCE(@Region,Region) = Region

在SQL Server中,
ISNULL()
也是一种替代方法;)。在SQL Server中,
ISNULL()
也是一种替代方法;)。