我想刪除GlassesColor表中與Glasses表中的GlassesID關聯的行。 我想在存儲過程中實現這一點。存儲過程只從客戶端獲取一個參數,一個CollectionID。如何刪除關聯SQL表中的行?
這裏有如下表:
下面是示例表內容:
任何想法我怎麼能實現呢? 提前謝謝!
我想刪除GlassesColor表中與Glasses表中的GlassesID關聯的行。 我想在存儲過程中實現這一點。存儲過程只從客戶端獲取一個參數,一個CollectionID。如何刪除關聯SQL表中的行?
這裏有如下表:
下面是示例表內容:
任何想法我怎麼能實現呢? 提前謝謝!
手動刪除會是這樣的:
delete
from GlassesColor
where GlassesID in (select GlassesID from Glasses where CollectionID = 3)
然而,除非是一次性的清理,你應該開始指定外鍵級聯規則,就像已經提出的其他答案一樣。
最簡單的方法是使用DELETE的CASCADE選項定義FOREIGN KEYS。
http://msdn.microsoft.com/en-us/library/aa933119%28v=sql.80%29.aspx
我看你已經有外鍵定義,所以你只需要確保他們有DELETE CASCADE選項。
沒有存儲過程,使用Constrains - >http://www.mssqlcity.com/Articles/General/using_constraints.htm OnDelete Cascade,所以當你在Glasses中刪除行時,它也會被刪除。
在GlassesColor
連接表的外鍵約束中,有on delete cascade
。這意味着刪除主鍵引用記錄時,相應的外鍵引用行也會被刪除。
所以你GlassesColor
表的定義是這樣的:
create table GlassesColor
(
GlassesId int foreign key references Glasses(GlassesID) on delete cascade,
.....
)
go
我回答使用在MSSQL
的INFORMATION_SCHEMA這裏是做在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
+1給大家!我們都同意它應該在外鍵約束上ON DELETE CASCADE! :-) :-) :-) – 2012-02-13 22:12:32