2016-10-20 4 views
2

私の手順では、変数@年は2つの形式をとる必要があります。1:@年= 1の場合、すべての年を選択します。 2:@年=入力した年。可変条件とエラーメッセージを伴うストアドプロシージャ

は、ここに私のコードのサンプルです:私はそれが@year = 2013のために働くことができます

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

が、私はすべての年を選択する@year = 1を組み込む方法がわかりません。私はそれがCASEであると推測している。

私は他の多くの同様の条件を他の変数と併用しているため、IF文を作成することはできません。

答えて

6
Where Year = Case when @Year = 1 Then Year else @Year end 
+0

ありがとうございます!それはうまくいった。 – user107242

+0

@ user107242お寄せいただきありがとうございます。 –

6

ジョンの答えの代わりに、しかし準同等:

WHERE (@year=1 OR [email protected]) 

それは、クエリの最後にOPTION(RECOMPILE)を追加することが最良である。この場合には、そうでない場合は、クエリが選択することはできませんyear列に存在する場合はインデックス。

0
--If you give value 1 it will select all the records from table year wise else if you give year like 2016 it fetches all the record based on given year 
ALTER PROC spProcName (@Year int) 
AS 
BEGIN 
    IF @Year = 1 
    BEGIN 
    SELECT 
     [Year] AS [YEAR], 
     Item AS [ITEM] 
    FROM Sales 
     ORDER BY [Year] 
    END 
    ELSE 
    SELECT 
     [Year] AS [YEAR], 
     Item AS [ITEM] 
    FROM Sales 
     WHERE DATEPART(YEAR, CAST([Year] AS date)) = @year 
END 
関連する問題