2016-10-12 2 views
1

SQL Server에서 신참입니다.null 값을 갖는 매개 변수를 사용하여 저장 프로 시저 만들기

|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 값을 갖는 파라미터로 저장 프로 시저를 만들려고 :

는 I는 표 4와 같은 열이 dbo.Example있다. 매개 변수와 함께이 같은

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

이 시도 두 번째 조건 (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

감사합니다. 그것은 작동 ... –

관련 문제