Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 если параметр NULL  [new]
VIT2708_
Guest
подскажите как написать запрос

@item int,
@parent int = null,
@theme int
as
begin
delete from Table where item=@item and parent=@parent and theme=@theme
end


если @parent не NULL то все нормально работает

по id записи удалять не могу так как на веб клиент id не передается

спасибо
23 окт 14, 10:55    [16747030]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
VIT2708_,

а что должно быть при @parent is null?
Так что ли:
DELETE T WHERE EXISTS(SELECT item,parent,theme INTERSECT SELECT @item,@parent,@theme);
?
23 окт 14, 10:58    [16747057]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
VIT2708_
Guest
iap
VIT2708_,

а что должно быть при @parent is null?
Так что ли:
DELETE T WHERE EXISTS(SELECT item,parent,theme INTERSECT SELECT @item,@parent,@theme);
?


Спасибо, то что надо

PS: это таблица для построения обычного дерева на веб клиенте
23 окт 14, 11:05    [16747101]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
VIT2708_
iap
VIT2708_,

а что должно быть при @parent is null?
Так что ли:
DELETE T WHERE EXISTS(SELECT item,parent,theme INTERSECT SELECT @item,@parent,@theme);

?


Спасибо, то что надо

PS: это таблица для построения обычного дерева на веб клиенте
Так в данном конкретном случае, наверно, побыстрее будет:
DELETE T WHERE item=@item AND (parent=@parent OR @parent IS NULL AND parent IS NULL) AND theme=@theme;
23 окт 14, 11:39    [16747299]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Если у вас есть значение, которое заведомо не встречается в поле или параметре, то можно записать так


DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;
23 окт 14, 12:50    [16747752]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
a_voronin
Если у вас есть значение, которое заведомо не встречается в поле или параметре, то можно записать так


DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;
Но вот, кстати, первый вариант с INTERSECT будет использовать индексы, если есть.
Так что..
И никаких допущений о типе полей и параметров.
23 окт 14, 12:58    [16747818]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
iap
a_voronin
Если у вас есть значение, которое заведомо не встречается в поле или параметре, то можно записать так


DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;
Но вот, кстати, первый вариант с INTERSECT будет использовать индексы, если есть.
Так что..
И никаких допущений о типе полей и параметров.

+1.
a_voronin
DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;
никогда так не пишите, индекс в пролете
23 окт 14, 13:48    [16748308]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Shakill
iap
пропущено...
Но вот, кстати, первый вариант с INTERSECT будет использовать индексы, если есть.
Так что..
И никаких допущений о типе полей и параметров.

+1.
a_voronin
DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;

никогда так не пишите, индекс в пролете
Если не ошибаюсь, он не в пролёте, если parent не допускает NULL.
И тут как-то писали, что реализация ISNULL становится всё умнее
23 окт 14, 13:52    [16748338]     Ответить | Цитировать Сообщить модератору
 Re: если параметр NULL  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
iap
Shakill
пропущено...

+1.
пропущено...
никогда так не пишите, индекс в пролете
Если не ошибаюсь, он не в пролёте, если parent не допускает NULL.
И тут как-то писали, что реализация ISNULL становится всё умнее

да, я про nullable поля по собственному опыту рефакторинга старого кода под 2008R2.
23 окт 14, 13:59    [16748383]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить