![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delete from table [D5, Paradox]
Романов Р.В. © (2003-02-05 10:54:00)Можно ли в одном SQL запросе удалить записи из нескольких таблиц? Если можно, то напишите простой примерчик пожалуйста.
Романов Р.В. (2003-02-05 14:35:00) [1]Не работает и @рен с ними. Тут и так все пугают что Paradox на каждом шагу падает. Я думаю надежность от них бы не увеличилась.
VAleksey (2003-02-05 14:31:00) [2]
> Романов Р.В. © (05.02.03 14:11)
>
> > внешние ссылки с каскадным удалением
Да написано - то написано, да только не работает это.
Романов Р.В. (2003-02-05 14:19:00) [3]
> В Rx library есть TSQLScript
Ценная весчь. Спасибо.
Романов Р.В. (2003-02-05 14:11:00) [4]
> внешние ссылки с каскадным удалением
Ни разу не слышал про это. В help"е где нибуть написано? Они объявляются при создании структуры таблиц в Database Desctop?
passm (2003-02-05 13:56:00) [5]Ламер (05.02.03 13:51)> В Rx library есть TSQLScript. Позволяет выполнить серию запросов, разделенных терминаторным символом (по умолчанию "/").
Ламер (2003-02-05 13:51:00) [6]:passm
А как через скрипт?
passm (2003-02-05 13:47:00) [7]Романов Р.В. © (05.02.03 12:56)> Насколько я помню, в Paradox"е можно объявлять внешние ссылки с каскадным удалением...
Романов Р.В. (2003-02-05 12:56:00) [8]Хорошо тогда такая задача. Имеем таблицы Города, Клиенты, Грузы, Оплата груза.
При удалени груза пишем 2 запроса
delete
from Оплата груза
where IdГруза = 16(для примера)
delete
from Грузы
where IdГруза = 16
При удалении Клиента нужно удалить все его грузы и информацию об их оплате. Получается уже 3 запроса
delete
from Оплата груза
where IdГруза in
(select IdГруза
from Грузы
where IdКлиента = 23(для примера))
и второй запрос
delete
from Грузы
where IdКлиента = 23
delete
from Клиенты
where IdКлиента = 23
Если удаляем город, то нужно удалить всех клиентов 3 запроса и все грузы 3 и сам город. Итого 7 запросов.
Получается какая - то геометрическая прогрессия, точнее факториал :(. Может как то можно оптимизировать все это что бы не писать столько запросов?
MsGuns (2003-02-05 11:58:00) [9]В Парадоксе тоже нельзя удалить (изменить/вставить) в более чем одной таблице ОДНИМ ЗАПРОСОМ. С какой стати это будет можно в Local SQL ? Если надо ОДНОВРЕМЕННО (в смысле логически за один цикл программы, например) удалить записи из неск. таблиц, как, допустим в случае удаления записи-"родителя" и ее "детей", то делается это или TDataSet.Delete поочередно из каждой таблицы, или двумя ПОСЛЕДОВАТЕЛЬНО выполняемыми запросами (сначала на детале, затем на мастере). Если данные на SQL-сервере, то такие запросы объединяют в одну транзакцию, которую и выполняют с последующим подтверждением (commit) или откатом (rollback)
Johnmen (2003-02-05 11:06:00) [10]Нет
Романов Р.В. (2003-02-05 11:05:00) [11]Спасибо и на этом.
passm (2003-02-05 11:02:00) [12]Романов Р.В. © (05.02.03 10:54)> Стандартно нельзя. Только через скрипт.