2016-10-05 2 views
0

전직 직원이 작성한 쿼리를보고 WHERE 절에서 -1을 사용하는 것으로 나타났습니다. 나는 -1이하는 일에 대한 설명을 찾기 위해 온라인 검색을 시도했지만 대답을 찾을 수는 없다. 누구든지이 -1의 기능이 무엇인지 설명 할 수 있습니까?SQL에서 -1을 사용하는 이유

WHERE 
(
    @EmployeeId = -1 OR 
    tblReg.PurchaseOrderId IN (SELECT DISTINCT r2.PurchaseOrderId 
           FROM Registration r2 
           INNER JOIN PurchaseOrder p2 ON p2.PurchaseOrderId = r2.PurchaseOrderId 
           WHERE p2.statuscid = 1 AND r2.IsBillable = 1 AND r2.SetNonBillable = 0 AND r2.EmployeeId = @EmployeeId 
           AND r2.RegistrationDate < @EndDate AND r2.RegistrationDate >= @StartDate) 
) 
+0

선택하지 않으면 매개 변수가 -1로 설정되며,이 경우 두 번째 기준이 사용됩니다. – JohnHC

+3

아마도 "가치 없음"을 의미하는 [마법 번호] (https://en.wikipedia.org/wiki/Magic_number_ (프로그래밍)) 일 수 있습니다. 이전 버전의 .NET과 같은 일부 프로그래밍 언어는 null 숫자를 지원하지 않으므로 -1을 사용하여 null을 나타냅니다. 이것은 단지 대회이지만, 특별한 것은 아닙니다. 그것은 단지 숫자입니다. – vcsjones

+0

숫자 일뿐입니다. 매개 변수가 -1로 설정된 경우가 있어야합니다. 아마도 특정 직원이 아닌 "모든 직원"이 될 수 있습니까? – MatBailie

답변

1

이 유형의 구조는 아마도 "모든 직원에게 배포"를 의미하는 데 사용됩니다. 즉, 변수 @EmployeeId의 값이 -1이면 모든 직원이 반환됩니다.

이 처리의 전형적인 방법은 NULL 함께 :

where (@EmployeeId is null) or 
     . . . 

동료의 버전은 가정 (아마 안전하게)를 id 결코 부정적이다. 그러나 언제나 누군가가 이드에게 새로운 의미를 제시 할 수 있습니다. "전 직원에게 부정적인 EmployeeId 값을 부여합시다"와 같은 "멋진 아이디어"는 이것을 깨뜨릴 수 있습니다.

+0

좋아요! 실제로 모든 직원을 돌려줍니다. 이미 'null'이라고 쓰지 않는 이유가 조금 혼란 스러웠습니다. 감사! –

0

EmployeeID는 1보다 크거나 같을 수 있습니다. EmployeeID = -1은이 구매와 일치하는 직원이 없음을 의미합니다.

이것은 SQL에서 나온 것이 아닙니다. 직원이 뭔가를 확인하는 데 사용한 것이 었습니다.

관련 문제