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()
也是一种替代方法;)。