2013-08-01 1 views
0

indentor에서 만든 일정 기간 동안 구매 들여 쓰기를 보여주는 보고서가 있습니다. 여기서 @Name 매개 변수는 들여 쓰기 필터에 사용됩니다. 그러나 문제는 @Name 매개 변수가 비어 있으면 보고서가 null 레코드를 반환한다는 것입니다. @Name 필터에서 아무 것도 선택하지 않으면 모든 들여 쓰기 보고서를 표시하려고합니다. 아래는 쿼리입니다. 나는 SQL에 익숙하지 않다.필터가 NULL 인 경우 모든 레코드를 반환하는 방법 (비어 있음)

SELECT INH.No_, INH.[Approved Date], 
INH.Indentor, INL.No_ AS ItemCode, 
INL.Description, INL.Description2, 
INL.Req_Quantity, INL.[Unit of Measure], 
PL.[Document No_], PH.[Order Date], PL.Quantity AS OrderedQuantity, PL.[Quantity Received] 
FROM [Company$Indent Header] AS INH 
INNER JOIN 
[Company$Indent Line] AS INL 
ON INH.No_ = INL.[Document No_] 
INNER JOIN 
[Company$Purchase Line] AS PL 
ON INL.[Document No_] = PL.[Indent No_] AND INL.[Line No_] = PL.[Indent Line No_] 
INNER JOIN 
[Company$Purchase Header] AS PH 
ON PL.[Document No_] = PH.No_ 
WHERE (INH.Indentor = @Name) AND (INL.No_ <> '') AND 
(INH.[Approved Date] BETWEEN @StartDate AND @EndDate) 
ORDER BY ItemCode 
+2

유 시도했다. – highwingers

+1

또는 @Name는 널 (null)이 될 수있는 매개 변수를 확인 할 수있는 저장 기능을 가진 어쩌면 – highwingers

+0

널입니다 :

SELECT INH.No_ , INH.[Approved Date] , INH.Indentor , ItemCode = INL.No_ , INL.[description] , INL.Description2 , INL.Req_Quantity , INL.[Unit of Measure] , PL.[Document No_] , PH.[Order Date] , OrderedQuantity = PL.Quantity , PL.[Quantity Received] FROM dbo.[Company$Indent Header] INH JOIN dbo.[Company$Indent Line] INL ON INH.No_ = INL.[Document No_] JOIN dbo.[Company$Purchase Line] PL ON INL.[Document No_] = PL.[Indent No_] AND INL.[Line No_] = PL.[Indent Line No_] JOIN dbo.[Company$Purchase Header] PH ON PL.[Document No_] = PH.No_ WHERE INH.Indentor = ISNULL(@Name, INH.Indentor) AND INL.No_ != '' AND INH.[Approved Date] BETWEEN @StartDate AND @EndDate ORDER BY ItemCode 

답변

1

쿼리가 어떻게 생성됩니까? 코드? 왜냐하면 @Name이 비어있는 경우 WHERE (INH.Indentor = @Name) AND의 다음 부분에있는 (INH.Indentor = @Name)을 제외하기 만하면됩니다. 당신이 계정에있는 조건을 WHERE clausule에 가져 가고 싶든, 내가 틀린 지 정정하든간에 SQL에 아무런 조건이 없다고 생각합니다.

1

사용과 같은 몇 가지 일이

WHERE (INH.Indentor = COALESCE(@Name,INH.Indentor) 

및 매개 변수가 @Name가 비어있는 경우는 ( 는 null COALESCE을 넣어 것

if len(@Name) = 0 
set @Name = null 

그래서 확인 후 저장 프로 시저의 시작 부분에 있는지 확인 @ Name, INH.Indentor)는 @Name이 null인지 확인한 다음 기존 값으로 확인합니다.

0

시도해보십시오.

(INH.Indentor = @Name 또는 이름이 NULL) WHERE 내 말
관련 문제