Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ошибка при удалении из М:М  [new]
faustrash
Member

Откуда:
Сообщений: 110
Я могу к одной строке таблицы привезать несколько полей из другой таблицы по средством связывающей таблицы (связь М:М)
Если запись первой таблицы связанна с записями второй таблицы, то эту запись (из первой таблицы) удалить не возможно.
Насколько я знаю есть свойство связи, при установки которого автоматически будут удаляться связи из связывающей таблицы. Но где и что это за свойство я не знаю (что усложняет поиск в интернете). Вопрос: что и где это свойство?
Если я не прав, и нужно писать триггер, то подскажите правильно ли создать триггер INSTEAD OF, в нем сначала удалить данные из связывающей таблицы таким образом:
DELETE FROM [Связывающая таблица]
WHERE [Ид.Таблицы1]= (SELECT [Ид.Таблицы1]
			FROM deleted)
И потом удалить строку из первой таблицы?
Зарание спасибо!
31 авг 09, 11:42    [7596794]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Вы удаляете данные из первой таблицы всегда посредством вызова определенной хранимки?

Если так, то просто добавьте этот Ваш DELETE в эту хранимку
И всё, задача решена
31 авг 09, 11:46    [7596828]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
faustrash
Member

Откуда:
Сообщений: 110
Нет, хранимые не использую. Удаление происходит в приложении. Там просто отправляется запрос "DELETE FROM [Таблица1]
WHERE [Ид.Таблицы1]= N"
31 авг 09, 11:50    [7596863]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
faustrash,

что Вы называете "связями"? От этого будет зависеть ответ.
31 авг 09, 11:51    [7596875]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
faustrash
Удаление происходит в приложении. Там просто отправляется запрос
А может ли приложение перед этим отправить запрос, подобный тому, который в Вашем первом сообщении ?
31 авг 09, 11:57    [7596920]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
faustrash
Member

Откуда:
Сообщений: 110
iap
faustrash,

что Вы называете "связями"? От этого будет зависеть ответ.

Это логическая связь. Для добавления в запись таблицы1 нескольких записей из таблицы2 - я добавляю в связывающую таблицу записи типа (Ид.Таблицы1, Ид.Таблицы2(№1)), (Ид.Таблицы1, Ид.Таблицы2(№2)), (Ид.Таблицы1, Ид.Таблицы2(№3)) и т.д.
31 авг 09, 11:58    [7596929]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
faustrash
Member

Откуда:
Сообщений: 110
Паганель
А может ли приложение перед этим отправить запрос, подобный тому, который в Вашем первом сообщении ?

Наверное можно сделать и так, только это не лучшее решение. Я больше доверяю методам сервера, чем своему умению писать приложения)
31 авг 09, 12:01    [7596960]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
faustrash
iap
faustrash,

что Вы называете "связями"? От этого будет зависеть ответ.

Это логическая связь. Для добавления в запись таблицы1 нескольких записей из таблицы2 - я добавляю в связывающую таблицу записи типа (Ид.Таблицы1, Ид.Таблицы2(№1)), (Ид.Таблицы1, Ид.Таблицы2(№2)), (Ид.Таблицы1, Ид.Таблицы2(№3)) и т.д.
То есть, Вы просто договорились сами с собой, что записи в двух таблицах связаны,
если у них совпадают значения в определённых полях?
Но сервер об этом и не подозревает! Нужен какой-то объект на сервере, который
позволял бы серверу контролировать ссылочную целостность.
И такой объект есть! Читайте про FOREIGN KEY
Инструкция CREATE TABLE
31 авг 09, 12:11    [7597052]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Забыл сказать: обратите внимание на каскадные правила FOREIGN KEY.
Правда, рекомендуется ими не злоупотреблять.
Но обычно, пока сам шишек не набьёшь, до конца не прочувствуешь!
31 авг 09, 12:14    [7597081]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
faustrash
Member

Откуда:
Сообщений: 110
iap
faustrash
iap
faustrash,

что Вы называете "связями"? От этого будет зависеть ответ.

Это логическая связь. Для добавления в запись таблицы1 нескольких записей из таблицы2 - я добавляю в связывающую таблицу записи типа (Ид.Таблицы1, Ид.Таблицы2(№1)), (Ид.Таблицы1, Ид.Таблицы2(№2)), (Ид.Таблицы1, Ид.Таблицы2(№3)) и т.д.
То есть, Вы просто договорились сами с собой, что записи в двух таблицах связаны,
если у них совпадают значения в определённых полях?
Но сервер об этом и не подозревает! Нужен какой-то объект на сервере, который
позволял бы серверу контролировать ссылочную целостность.
И такой объект есть! Читайте про FOREIGN KEY
Инструкция CREATE TABLE

Все верно, я плохо подумал над вопросом, FOREIGN KEY определены, из-за этого и происходит ошибка.
31 авг 09, 12:16    [7597102]     Ответить | Цитировать Сообщить модератору
 Re: ошибка при удалении из М:М  [new]
faustrash
Member

Откуда:
Сообщений: 110
iap
Забыл сказать: обратите внимание на каскадные правила FOREIGN KEY.
Правда, рекомендуется ими не злоупотреблять.
Но обычно, пока сам шишек не набьёшь, до конца не прочувствуешь!

Ну точно! Спасибо! Каскадные ограничения ссылочной целостности - это то что мне нужно)
31 авг 09, 12:19    [7597136]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить