具有可变条件和错误消息的存储过程

use*_*242 2 sql t-sql sql-server stored-procedures

在我的程序中,变量@year应该采用两种形式:1:如果@ Year = 1,选择所有年份.2:@年=输入的年份.

这是我的代码示例:

CREATE PROC spProcName (@Year)
AS
BEGIN 
SELECT Year AS [YEAR], Item AS [ITEM]
FROM Sales
WHERE Year = @YEAR
Run Code Online (Sandbox Code Playgroud)

我可以让它适用于@Year = 2013,但我不知道如何结合@Year = 1来选择所有年份.我猜这将是CASE.

我还有许多其他变量的类似条件,所以我不能只创建一个IF语句.

Joh*_*tti 6

Where Year = Case when @Year = 1 Then Year else @Year end
Run Code Online (Sandbox Code Playgroud)


TT.*_*TT. 6

替代约翰的答案,但准等价:

WHERE (@year=1 OR year=@year)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,最好OPTION(RECOMPILE)在查询结束时添加,否则查询将无法选择year列中是否存在索引.