Удаление нескольких таблиц из SQL Server 2008 с использованием Datalist C # - PullRequest
2 голосов
/ 07 марта 2012

Это может показаться распространенным вопросом, но я гуглил, чтобы найти правильный ответ, который может решить мою проблему, и не смог этого сделать.

У меня есть несколько таблиц, связанных друг с другом с помощью ProductID, и я хочуудалить все данные из них, когда продукт из основной таблицы был удален.т.е.

Продукты : ProductID - Vender - Description

ProductRatings : ProductID - Rating - VisitorsCount

ProductComments : ProductID - VisitorName - Comment

Я читал, что для такой ситуации используется триггер SQL, но я понятия не имею об этом, кроме того, что в некоторых случаях я мог бы упомянуть свой DataSource в файле ASCX.CS, а в некоторых случаях я мог бы просто использовать SqlDatasoruce в файле ASCX.Можно ли использовать какой-либо запрос или хранимую процедуру?

1 Ответ

4 голосов
/ 07 марта 2012

Самый простой способ сделать это - установить отношение внешнего ключа к ProductID и установить on delete cascade.Это общая идея:

create table ProductRatings
(
    ProductID int not null 
        foreign key references Products(ProductID) on delete cascade,
    Rating int not null,
    VisitorsCount int not null
)

Когда вы удаляете значение первичного ключа из таблицы Products, это приводит к тому, что SQL Server удаляет все записи, имеющие ограничение внешнего ключа для этого первичного ключа.ключевое значение.Если вы сделаете это и со своей таблицей ProductComments, проблема решена.Нет необходимости явно вызывать DELETE для любых записей в ссылочных таблицах.

И если вы не используете ссылочную целостность ... вам следует.

EDIT : это также верно для UPDATE s на первичном ключе.Вам просто нужно указать on update cascade, и ссылки на внешний ключ будут обновлены, как первичный ключ, чтобы обеспечить RI.

...