2013-11-07 2 views
2

Я пытаюсь передать параметр, и если параметр равен нулю, я хочу установить идентификатор округа самому себе. Если идентификатор округа не равен нулю, я хочу вернуть записи из всех округов в сотрудничестве графства.sql if оператор, проверяющий нулевой параметр

Я получаю неправильную синтаксическую ошибку. Есть идеи, как это сделать?

DECLARE @pCountyId as int; 

    select p.Id, p.LastName, p.FirstName, c.Id, c.Description 
    FROM Participant as p 
    INNER JOIN Application as a on p.Id = a.ParticipantId 
    INNER JOIN Dictionary.Counties as c on a.CountyId = c.Id 
    WHERE 

    If @pCountyId is null 
     BEGIN 
      c.Id = c.Id 
     END 
    ELSE 
      c.Id in (SELECT cc.CountyId 
        FROM CountyCollaboration as cc 
        WHERE cc.CollaborationId = (SELECT cc1.CollaborationId 
             FROM CountyCollaboration as cc1 
             WHERE cc1.CountyId = @pCountyId)) 

ответ

5

Try:

WHERE 

(@pCountyId is null) OR 

c.Id in (SELECT cc.CountyId 
        FROM CountyCollaboration as cc 
        WHERE cc.CollaborationId = (SELECT cc1.CollaborationId 
             FROM CountyCollaboration as cc1 
             WHERE cc1.CountyId = @pCountyId)) 

Но переосмыслить свое состояние, это слишком много подзапросов.

+0

это работало, спасибо – user1202606

+2

рад, что это сработало. Пожалуйста, проверьте ответ как принято, если решение было полезным. –

0

Насколько я понимаю, вы не можете добавить if-инструкцию так, как вы находитесь в запросе, - нет синтаксиса для такого запроса. Вы можете делать то, что вы делаете, с двумя отдельными запросами в каждом блоке (дублируйте SELECT/INNER JOIN), но это не самое идеальное решение.

0

Это должно сделать вас:

select p.Id  , 
     p.LastName , 
     p.FirstName , 
     c.Id , 
     c.Description 
from Participant   p 
join Application   a on a.ParticipantId = p.Id 
join Dictionary.Counties c on c.Id   = a.CountyId 
where  @pCountyId is  null 
    OR ( @pCountyID is not null 
     and c.Id in (select cc.CountyId 
         from CountyCollaboration cc 
         join CountyCollaboration cc1 on cc1.CollaborationId = cc.CollaborationId 
                and cc1.CountID = @pCountyId 
        ) 
    ) 
Смежные вопросы