|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.08.2011, 16:55 | #1 |
Пользователь
Регистрация: 25.09.2009
Сообщений: 17
|
Запрос на удаление
Как правильно написать запрос на удаление. Ругается на Full:
Код:
Последний раз редактировалось Stilet; 24.08.2011 в 18:55. |
24.08.2011, 18:56 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
ХЫ... А ты че тупо заменил Select в команде и думаешь что тебе каскадное удаление пройдет? Я почему-то оч. уверен что стандартом DELETE такие присоединения не поддерживаются.
I'm learning to live...
|
25.08.2011, 08:30 | #3 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Никто из авторов не хочет признаваться в какой СУБД у него проблемы.
Судя по некоторым деталям запроса, предположим, что это MS SQL Server. Правда, все равно непонятно какой версии. Допустим, что это так. Если бы автор темы дал себе труд посмотреть справку по предложению DELETE, то увидел бы, что информация из других таблиц, на которой основываются удаления в упомянутой, должны указываться после второго аргумента (оператора) FROM. |
25.08.2011, 08:49 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
если Виталий прав, и это попытка сделать запрос на удаление для записей, которые отбираются через SELECT
тогда возможно сработает такой вариант: Внимание! Два важных замечания. 1) В таблице DevicesDict поле DeviceDictID должно быть первичным ключом (если это поле таким не является, замените в запросе на то поле, которое ключом является 2) на удаляемые записи в таблице DevicesDict не должно быть ссылок, либо должно быть включено каскадное удаление для всех foreign keys Код:
|
25.08.2011, 09:48 | #5 |
Пользователь
Регистрация: 25.09.2009
Сообщений: 17
|
Вы правы, в DevicesDict поле DeviceDictID является первичным ключом.
Подскажите, как определить наличие ссылок на удаляемые записи в таблице DevicesDict? |
25.08.2011, 09:59 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Чтобы определить наличие ссылок на удаляемые записи, нужно знать структуру таблицы и как они взаимосвязаны. например, уже даже из запроса видно, что у Вас в таблице Devices есть ссылка (foreign key) на таблицу DevicesDict (на DeviceDictID) Если каскадное удаление по каким-то причинам включать нельзя или нежелательно, тогда, боюсь, что одним запросом задачу не решить... если это MS SQL - я бы предложил сделать хранимую процедуру. Там запросом вытащить DeviceDictID в табличную переменную, потом Код:
|
|
25.08.2011, 10:11 | #7 |
Пользователь
Регистрация: 25.09.2009
Сообщений: 17
|
Как включить в запрос каскадное удаление. Покажите пример.
|
25.08.2011, 10:25 | #8 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
и второе, может быть, Вы уже откроете нам тайну - какая у Вас СУБД ?! |
|
25.08.2011, 14:15 | #9 |
Пользователь
Регистрация: 25.09.2009
Сообщений: 17
|
Стоит SQL 2000.
Предложенный запрос удаляет все записи из таблицы DevicesDict, условие DD.Type is Null не выполняется. Можете объяснить? |
25.08.2011, 15:45 | #10 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Если DeviceDictID является уникальным полем (первичным ключом), разумеется! попытаемся разобраться... Вы знаете, сколько записей у Вас удаляется? Тогда попробуйте такой запрос: Код:
посмотрите, если ли среди выбранных записей те, где DD.Type заполнено значением (т.е. условие DD.Type is null) не выполняется... п.с. можно, конечно, данное условие отбора продублировать через AND во внешнем запросе (который delete from ..) но в данном случае, я бы рекомендовал Вам разобраться в причинах подобного поведения (я лично считаю, что Вы чего-то не учитываете или ошибочно считаете, что удаляются не те записи, что выбираются во внутреннем запросе). п.п.с. если есть "незанятое" поле в таблице DevicesDict (или есть возможность изменить структуру добавив туда такое поле временно, для отладки). тогда можно вместо DELETE from выполнить команду UPDATE DevicesDict set ReservedField = 1 where where DeviceDictID in (select DD.DeviceDictID ...... а потом посмотреть, какие записи "пометились" единичкой... вообще так, отлаживать на расстоянии достаточно проблематично. Может быть у Вас на таблице триггер какой-нибудь висит, который и создаёт подобные проблемы... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запрос на добавление\удаление | Stelix | Microsoft Office Access | 0 | 24.12.2010 12:41 |
Вложенный запрос на удаление конкретной записи | Droid | БД в Delphi | 1 | 03.08.2010 17:47 |
Запрос на удаление | JustinDEbass | Microsoft Office Access | 7 | 11.04.2010 08:15 |
Запрос на удаление с условием | Dimok82 | SQL, базы данных | 1 | 13.03.2009 18:19 |
запрос на удаление | ГОСЕАН | Помощь студентам | 9 | 13.08.2008 10:03 |