powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / если параметр NULL
9 сообщений из 9, страница 1 из 1
если параметр NULL
    #38785036
VIT2708_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите как написать запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
@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 не передается

спасибо
...
Рейтинг: 0 / 0
если параметр NULL
    #38785039
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708_,

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

?
...
Рейтинг: 0 / 0
если параметр NULL
    #38785054
VIT2708_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iapVIT2708_,

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

?

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

PS: это таблица для построения обычного дерева на веб клиенте
...
Рейтинг: 0 / 0
если параметр NULL
    #38785121
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708_iapVIT2708_,

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


?

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

PS: это таблица для построения обычного дерева на веб клиентеТак в данном конкретном случае, наверно, побыстрее будет:
Код: sql
1.
DELETE T WHERE item=@item AND (parent=@parent OR @parent IS NULL AND parent IS NULL) AND theme=@theme;
...
Рейтинг: 0 / 0
если параметр NULL
    #38785249
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас есть значение, которое заведомо не встречается в поле или параметре, то можно записать так


Код: sql
1.
DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;
...
Рейтинг: 0 / 0
если параметр NULL
    #38785260
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voroninЕсли у вас есть значение, которое заведомо не встречается в поле или параметре, то можно записать так


Код: sql
1.
DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;

Но вот, кстати, первый вариант с INTERSECT будет использовать индексы, если есть.
Так что..
И никаких допущений о типе полей и параметров.
...
Рейтинг: 0 / 0
если параметр NULL
    #38785359
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapa_voroninЕсли у вас есть значение, которое заведомо не встречается в поле или параметре, то можно записать так


Код: sql
1.
DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;

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

никогда так не пишите, индекс в пролете
...
Рейтинг: 0 / 0
если параметр NULL
    #38785370
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakilliapпропущено...
Но вот, кстати, первый вариант с INTERSECT будет использовать индексы, если есть.
Так что..
И никаких допущений о типе полей и параметров.
+1.
a_voronin
Код: sql
1.
DELETE T WHERE item=@item AND ISNULL(parent, -1) = ISNULL(@parent, -1) AND theme=@theme;


никогда так не пишите, индекс в пролетеЕсли не ошибаюсь, он не в пролёте, если parent не допускает NULL.
И тут как-то писали, что реализация ISNULL становится всё умнее
...
Рейтинг: 0 / 0
если параметр NULL
    #38785382
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapShakillпропущено...

+1.
пропущено...
никогда так не пишите, индекс в пролетеЕсли не ошибаюсь, он не в пролёте, если parent не допускает NULL.
И тут как-то писали, что реализация ISNULL становится всё умнее
да, я про nullable поля по собственному опыту рефакторинга старого кода под 2008R2.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / если параметр NULL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]