Как удалить строки в связанных таблицах SQL? - PullRequest
4 голосов
/ 14 февраля 2012

Я хочу удалить строки в таблице GlassesColor, которые связаны с GlassesID в таблице Glasses. Я хочу реализовать это в хранимой процедуре. Хранимая процедура получает только один параметр со стороны клиента, CollectionID.

Вот следующие таблицы:

enter image description here

Вот пример содержимого таблиц:

enter image description here

Есть идеи, как мне это реализовать? Заранее спасибо!

Ответы [ 6 ]

3 голосов
/ 14 февраля 2012

Удаление вручную будет выглядеть примерно так:

delete 
from GlassesColor 
where GlassesID in (select GlassesID from Glasses where CollectionID = 3)

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

3 голосов
/ 14 февраля 2012

Самый простой способ - определить FOREIGN KEYS с параметрами CASCADE для DELETE.

http://msdn.microsoft.com/en-us/library/aa933119%28v=sql.80%29.aspx

Я вижу, что у вас уже определены внешние ключи, поэтому вам просто нужно убедиться, чтоВариант CASCADE для DELETE.

2 голосов
/ 14 февраля 2012

Вот самый простой способ сделать это в Microsoft SQL Server: когда вы создаете ограничение внешнего ключа, добавьте ON UPDATE CASCADE ON DELETE CASCADE в его определение.Я предполагаю, что вы хотите, чтобы изменения в GlassesID также распространялись.;-) Если нет, то вам не нужен «ОБНОВЛЕНИЕ КАСКАДА».

Пример:

ALTER TABLE
  [GlassesColor]
WITH CHECK ADD CONSTRAINT
  [FK_GlassesColor_GlassesID]
FOREIGN KEY
  ([glassesID]) REFERENCES [Glasses] ([glassesID])
ON UPDATE CASCADE ON DELETE CASCADE
2 голосов
/ 14 февраля 2012

Я ответил на что-то похожее за использование INFORMATION_SCHEMA в MSSQL

SQL Server: каскадный эквивалент удаления таблицы?

2 голосов
/ 14 февраля 2012

В ограничении внешнего ключа для таблицы соединения GlassesColor укажите on delete cascade. Это означает, что при удалении записи, на которую ссылается первичный ключ, соответствующая строка ссылки на внешний ключ также будет удалена.

Итак, определение вашей таблицы GlassesColor будет выглядеть так:

create table GlassesColor
(
    GlassesId int foreign key references Glasses(GlassesID) on delete cascade,
    .....
)
go
2 голосов
/ 14 февраля 2012

Без хранимой процедуры используйте Constrains -> http://www.mssqlcity.com/Articles/General/using_constraints.htm OnDelete Cascade, поэтому при удалении строки в Glasses она также будет удалена в цвете Glasses.

...