SQL Server에 저장 프로 시저가 있습니다. 다음과 같이 SP의 SELECT 부분은 다음과 같습니다 WHERE 절의 AND 부분에서 CASE 또는 IF..ELSE 사용
SELECT * FROM demoTable dt
INNER JOIN demoTable2 dt2
WHERE
(@StartDate IS NULL OR dt.StartDate = @StartDate OR (dt.StartDate >= @StartDate and dt.EndDate <= @EndDate))
AND (@EndDate IS NULL OR dt.EndDate = @EndDate OR (dt.StartDate >= @StartDate and dt.EndDate <= @EndDate))
지금 내가 위의 수정하려는 위치를 AND 조건 후 절 부분입니다. 이 SP에 전달되는 3 개의 새 매개 변수/변수를 추가했습니다. 나는 절은 다음과 같이 WHERE보다 조작하기 위해 노력하고있어 이들 변수의 값을 사용
@ID int , @isAdmin int and @Date varchar(50)
:
WHERE
@StartDate IS NULL OR dt.StartDate = @StartDate OR (dt.StartDate >= @StartDate and dt.EndDate <= @EndDate))
-- Logic change below
AND(
CASE WHEN (@ID != 100 AND @isAdmin != 1)
THEN (@EndDate IS NULL OR dt.EndDate = @EndDate OR (dt.StartDate >= @StartDate and dt.EndDate <= @EndDate))
ELSE (dt.EndDate>sysdatetime())
END)
그러나 수정 후 내가 오류가 발생하고있어
.Error 문 :이 오류는 내가 사용했던 라인 가리키는
Incorrect syntax near the keyword 'IS'.
수정 된 로직 부분에서 NULL입니다.
(@ID != 100 AND isAdmin != 1)
이 사실이 보유하고 그렇지 않으면 내가 새로운 논리의 예를 적용 할 경우에만
기본적으로 내가하고 싶은 및 즉
(@EndDate IS NULL OR dt.EndDate = @EndDate OR (dt.StartDate >= @StartDate and dt.EndDate <= @EndDate))
에 대한 원래의 논리를 적용하는 것입니다
(dt.EndDate>sysdatetime()
어떻게하면됩니까?
그 이유는 알지 못합니다. 좀 더 간단한 것을 시도해 봤고 휴식을 취할 때까지 추가 했습니까? CASE'같은 뭔가를 시작할 때 @ID! = 100 ELSE FALSE 'THEN 사실 (@StartDate가 null –
STARTDATE 난 당신이 단지에서 @ – KinSlayerUY
@KinSlayerUY 누락 생각 NULL IS WHERE 대 case db는'dt.StartDate'를 참조하고 있다고 생각합니다 –