SQL Server如果Null返回所有内容

时间:2015-05-20 00:18:27

标签: 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 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不为空,则返回记录where Country = @Country,否则返回所有国家/地区。我希望Region具有相同的行为。

我试过Else Is Not Null,而且还有其他!= Null,Else<>空

但没有任何效果。

编辑:

我明白了。我只是没有正确地调用程序。这是工作。我必须调用这个名为GetTotals的程序:

  • GetTotals Navy,Null,Europe这将使整个海军返回全欧洲。
  • GetTotals Navy,Albania,Null这将归还海军在阿尔巴尼亚的总数

2 个答案:

答案 0 :(得分:3)

这通常是这样做的:

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

答案 1 :(得分:1)

WHERE (Country = @Country OR @Country IS NULL) AND (Region = @Region OR @Region IS NULL)