Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];




Вниз

Каскадное удаление в MSSQL7 


Beginer   (2002-01-31 15:28) [0]

Начал переносить первую программу с Access формата на SQL7.
Обнаружил неприятное отличие SQL-диалекта SQL7 от Access: в настройках связей (между таблицами) отсутствует вариант каскадного обновления и удаления в дочерней таблице.
Что же теперь, вручную прописывать на клиенте удаление из дочерней таблицы перед удалением из родительской или есть какой то способ прописать каскадное удаление строк дочерней таблицы, как это сделано в Access?

Заранее благодарю.



knyaz17   (2002-01-31 15:34) [1]

Пользуйся триггерами!



TSV   (2002-01-31 16:15) [2]

Триггерами не получится, тат как они по своей природе AFTER . Есть два варианта: либо MSSQL 2000, либо делать через хранимые процедуры.

Удачи.



kig   (2002-01-31 17:17) [3]

С триггерами может получится, если целостность поддерживать тоже через триггера. Но руками это писать - уж лучше сгенерить их в, например в Power Designer.



TSV   (2002-01-31 17:20) [4]

Ну, если все через триггеры, тогда конечно да. Но по-моему, проще вариант с MSSQL 2000.

С уважением.



Johnmen   (2002-01-31 17:21) [5]

>TSV : это действительно так в MSSQL !!!??? -> ...Триггерами не получится, тат как они по своей природе AFTER...



TSV   (2002-01-31 17:24) [6]

В MSSQL 2000 появились триггеры INSTEAD (BEFORE), а также каскадные удаления / обновления.



wicked   (2002-01-31 17:31) [7]

да всё получится триггерами насчёт удаления.... а целостность можно поддерживать через constraint - правда, не каскадную, а запретительную (restrict), как в парадоксе.....
насчёт удаления - если не удадутся удаления в подчинёных таблицах, то произойдёт откат транзакции и mssql ничего не удалит....



kig   (2002-01-31 17:34) [8]

К сожалению INSTEAD OF не помогают в этой ситуевене - они по своей природе тоже AFTER - срабатывают только после декларативной целостности (.


из статьи
http://www.optim.ru/cs/2000/3/sql2000-99/sql2000-99.asp
"...ведь все ограничения проверяются до запуска триггеров, и в случае их нарушения триггеры просто не запускаются. Кстати, это утверждение верно и для INSTEAD OF-триггеров. Это не дает вмешаться в логику записи изменений до проверки декларативных ограничений."



TSV   (2002-01-31 18:26) [9]

Тогда только каскадное удаление.



andreym999   (2002-01-31 23:03) [10]

В триггерах MSSQL 7.0 есть представления журнала транзакций называются inserted и deleted с их помощью транзакцию можно или откатить или дать ей возможность завершиться



SergSuper   (2002-02-01 10:15) [11]

Если есть INSTEAD OF триггер, то действий вообще никаких не произойдёт, т.к. всё действие обеспечивается только триггером.
Так что говорить что они AFTER нельзя. Они именно INSTEAD



TSV   (2002-02-01 10:19) [12]

> andreym999 (31.01.02 23:03)

Ну и что ты этим хотел сказать. Мы о КАСКАДНОМ удалении говорим.



kig   (2002-02-01 15:40) [13]

2 SergSuper (01.02.02 10:15)

Они AFTER по отношению не к действиям, а по отношению к механизму декларативной целостности. Вопрос на эту тему, да и статье (см. ссылку выше) они рассматриваются именно с этих позиций.



andreym999   (2002-02-01 17:21) [14]

To TSV а что тебе мешает используя inserted и deleted при срабатывании триггера удалить данные в дочерней таблице, в ней также может сработать триггер и сделать тоже. В случае возникновении ошибки транзакцию откатить.



TSV   (2002-02-01 19:05) [15]

> andreym999 (01.02.02 17:21)

Тогда придется и ссылочную целостность через триггеры делать, т.е. не через foreign key constraints . В общем, занятие хлопотное.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.026 c
4-90702           Строр                 2001-12-28 12:44  2002.02.28  
Как отследить нажатие клавиш когда прога сидит в трее?


1-90560           Andreika              2002-02-11 21:55  2002.02.28  
Проблема с MDI-фрмой


3-90516           Diana_II              2002-02-05 14:22  2002.02.28  
Запрос на обновление из справочника


14-90661          Иван Шихалев          2002-01-15 18:11  2002.02.28  
---|Ветка была без названия|---


6-90629           Станислав             2001-12-10 15:47  2002.02.28  
IP-адресс