2016-10-12 12 views
1

私はSQL Serverで新人です。null値を持つパラメータを含むストアドプロシージャを作成します。

私はこのような4列有するテーブルdbo.Example有する:

|Barcode|Goods | Stock | Person | 
----------------------------------------- 
|0020307|Book |Available | Mike | 
|0090010|Table |NULL  | Jane | 
|0140397|Chalk |NULL  | Mike | 
|0190017|Glass |NULL  |Christoper| 
|0080017|Hammer|Available | Ron | 

それは[Stock]列のNULL値を持つパラメータでストアドプロシージャを作成しようとします。

CREATE PROCEDURE examproc 
    @person NVARCHAR(50) = NULL, 
    @stock nvarchar(50) = NULL 
AS 
    SELECT * 
    FROM dbo.Example 
    WHERE person = ISNULL(@person, person) 
     AND Stock = ISNULL(@stock, Stock) OR Stock IS NULL 

とパラメータを次のように手順を実行します。

EXEC examproc @person = 'Mike' 

しかし、結果は私が期待したものではありません。

|Barcode|Goods | Stock | Person | 
----------------------------------------- 
|0020307|Book |Available | Mike | 
|0090010|Table |NULL  | Jane | 
|0140397|Chalk |NULL  | Mike | 
|0190017|Glass |NULL  |Christoper| 

私は私のSQL文を使用すると、何かが間違っている知っています、私はまだ混乱しています。

CREATE PROCEDURE examproc 
    @person NVARCHAR(50) = NULL, 
    @stock nvarchar(50) = NULL 
AS 
    SELECT * 
    FROM dbo.Example 
    WHERE person = ISNULL(@person, person) 
     AND (Stock = ISNULL(@stock, Stock) OR Stock IS NULL) 

とあなた: - 私は提案を必要とする

..

おかげで...あなたはWHERE句でANDORを混合する際に、超注意する必要があります

答えて

2

これを試してみてください第2の条件(Stock IS NULL)を除外することによってそれをさらに単純化することができます。これはすでに最初のストック条件によって処理されています。

CREATE PROCEDURE examproc 
    @person NVARCHAR(50) = NULL, 
    @stock nvarchar(50) = NULL 
AS 
    SELECT * 
    FROM dbo.Example 
    WHERE Person = ISNULL(@person, person) 
     AND Stock = ISNULL(@stock, Stock) 
+1

ありがとうございました!できます... –

関連する問題