2014-01-09 3 views
0

У меня есть курсор или два, потому что я не могу понять, как это сделать любым другим способом.
Проблема в том, что parentid может иметь значение null в базе данных. Поэтому я тестирую, если @parentid is not null, то если это я, то я запускаю один курсор where parentid = @parentid, а затем у меня есть другой, где parent id равен null. (ниже)Курсор с нулевым значением или значением

declare findParent_c cursor for 
     select ID , page 
     from dPageHierarchy 
     where profileid = @profileId 
     and parentid is null; 
open findParent_c; 
fetch findParent_c into @FindParentId, @ElementCheck; 
while @@FETCH_STATUS = 0 
begin 

    -- Do stuff here. 

fetch findParent_c into @FindParentId, @ElementCheck; 
end 
close findParent_c; 
deallocate findParent_c; 

У кого-нибудь есть способ обойти это? Мне не нравится удваивать код в скрипте.

+0

Вы пытались использовать оператор CASE в своем запросе? – Brendan

+0

Как бы вы могли добавить случай в предложение while для обработки положительного нуля? – DaImTo

+0

Редактировать, если мой родитель и профилид были замешаны в описании. – DaImTo

ответ

0

Вы ищете это?

declare findParent_c cursor for 
select ID , page 
from dPageHierarchy 
where profileid = @profileId 
and ((parentid = @parentid) or (parentid is null and @parentid is null)); 
0

изменить: этот курсор проверяет, установлен ли @parentid. если есть, то он выбирает parentid = @parentid, если нет, он выбирает parentid is null and profileid = @profileid.

declare findParent_c cursor for 
     select ID , page 
     from dPageHierarchy 
     where ( profileid = @profileId 
       and parentid is null 
       and @parentid is null) 
      or ( @parentid is not null 
       and parentid = @parentid); 
open findParent_c; 
+0

ok, но если установлен параметр @parentid, который также вернет нулевой родитель? – DaImTo

+0

Я только что протестировал его. – DaImTo

+0

Что именно следует вернуть в этом случае? –

Смежные вопросы