除非输入变量,否则SQL Server WHERE子句默认为all

时间:2017-08-21 17:55:42

标签: sql sql-server

我有一个包含大约10列数据的表格,我希望能够创建一个只根据用户定义的参数提取相关数据的存储过程。 fact.Spend表的简化版本如下所示:

Location  |  Year  |  SpendYear
----------+--------+-----------
New York  |  2015  |  25.00
New York  |  2016  |  23.20
Dallas    |  2015  |  29.30
Dallas    |  2016  |  25.32
San Fran  |  2015  |  23.33
San Fran  |  2016  |  23.97

我尝试用此做的一个非常基本的版本是:

CREATE PROCEDURE spPullSpendData 
    (@Location VARCHAR(20), @SpendYear SMALLINT)
AS
    SELECT *
    FROM fact.Spend
    WHERE Location = @Location
      AND SpendYear = @SpendYear

但我希望@SpendYear参数是可选的,如果没有用户输入则默认为所有年份。我尝试使用子查询进行了一些变化,但到目前为止,没有什么能够解决问题。

1 个答案:

答案 0 :(得分:1)

SELECT
    *
FROM
    fact.Spend
WHERE
    (Location = @Location)
AND 
    (SpendYear = @SpendYear or @SpendYear IS NULL)