Форум: "Базы";
Поиск по всему сайту: 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.032 c
1-90586           Michael C             2002-02-12 10:27  2002.02.28  
Поиск в строке 3ей запятой...


3-90527           vopros                2002-01-31 09:50  2002.02.28  
Как сделать чтобы в paradox базу вход был по паролю?


1-90624           ruslan_as             2002-02-13 11:16  2002.02.28  
Поставить все DBEdit в Enabled:=False;


4-90705           cher_gvf              2001-12-03 17:33  2002.02.28  
Как послать сообщение по сети определенным юзерам?


1-90551           Eduard                2002-02-11 11:51  2002.02.28  
Заставка к проге