2012-02-13 54 views
4

我想刪除GlassesColor表中與Glasses表中的GlassesID關聯的行。 我想在存儲過程中實現這一點。存儲過程只從客戶端獲取一個參數,一個CollectionID。如何刪除關聯SQL表中的行?

這裏有如下表:

enter image description here

下面是示例表內容:

enter image description here

任何想法我怎麼能實現呢? 提前謝謝!

+0

+1給大家!我們都同意它應該在外鍵約束上ON DELETE CASCADE! :-) :-) :-) – 2012-02-13 22:12:32

回答

3

手動刪除會是這樣的:

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

然而,除非是一次性的清理,你應該開始指定外鍵級聯規則,就像已經提出的其他答案一樣。

2

GlassesColor連接表的外鍵約束中,有on delete cascade。這意味着刪除主鍵引用記錄時,相應的外鍵引用行也會被刪除。

所以你GlassesColor表的定義是這樣的:

create table GlassesColor 
(
    GlassesId int foreign key references Glasses(GlassesID) on delete cascade, 
    ..... 
) 
go 
2

這裏是做在Microsoft SQL Server的最簡單的方法類似:當您創建外鍵約束,增加ON UPDATE CASCADE ON DELETE CASCADE它的定義。我假設你想要更改GlassesID來傳播。 ;-)如果不是,那麼你不需要「ON UPDATE CASCADE」。

例子:

ALTER TABLE 
    [GlassesColor] 
WITH CHECK ADD CONSTRAINT 
    [FK_GlassesColor_GlassesID] 
FOREIGN KEY 
    ([glassesID]) REFERENCES [Glasses] ([glassesID]) 
ON UPDATE CASCADE ON DELETE CASCADE