Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
Where子句中的SQL Server条件_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Where子句中的SQL Server条件

Where子句中的SQL Server条件,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我正在上SQL Server课程。存储过程中的条件Where子句有问题。3个参数中有2个可能为空 @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

我正在上SQL Server课程。存储过程中的条件Where子句有问题。3个参数中有2个可能为空

@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 

if @Country is not null @Country and if @Region !=Null @Region = Region
如何重新构造Where子句?我来自一个访问背景

GetTotals Navy

OR

GetTotals Navy,Albania,Europe
我想强制提供服务,国家和地区可选。所以我希望能够像这样调用这个过程。所以,如果我没有指定地区和国家,它应该返回所有海军


这可能吗?

就性能而言,最好不要在
WHERE
子句中使用函数

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
使用
ISNULL
函数

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 = ISNULL(@Country ,Country)
AND Region = ISNULL(@Region ,Country)
试试这个:

Where (@country is null or @country = country)
And (@region is null or @region = region)
您正在搜索的内容称为全面查询