2009-10-02 56 views
2

我正在使用asp.net和sql server。我有2個表:分類和產品。在產品表中,我將categoryId設置爲FK。我想要做的是:當我從類別表中刪除類別時,我希望該類別中的所有產品都將在產品表中刪除。這怎麼能做到(我更喜歡存儲過程,但它不是Mandetory)?同時從2個表中刪除?

+0

如果你得到了答案。請選擇一個正確的答案。 – anishMarokey

+0

我不知道如何在這裏新建 – tone

+0

已提供的答案旁邊有一個灰色勾勒的勾號。然後,選擇與您最能回答您的問題的答案相對應的答案。 – w4ymo

回答

2

您可以定義FK使用DELETES CASCADE。否則,您需要首先刪除該類別中的所有產品,然後刪除該類別。

1

@CategoryID正進入存儲過程

delete from products where categoryid = @categoryid 
delete from categories where categoryid = @categoryid 
1

有很多方法可以做到這一點。我將在SQL中的外鍵約束上將刪除設置爲「級聯」。讓SQL爲你管理,這是它擅長的。

2

如果您可以調整架構,SQL Server支持cascading deletes。有了這樣的FK約束,你可以通過對該類別的單個刪除來獲得這種效果。不是每個人都喜歡級聯刪除,請介意你!

0

您可以通過在數據庫的'圖表'部分(假設MS SQL 2005/2008)或屏幕頂部的關係按鈕(SQL 2000)中創建表格之間的關係來完成此操作。

一旦一個一對多的關係已經與級聯創建刪除查詢可以簡單爲:

delete from Categories where CategoryId = XX 

這將自動刪除與該類別相關聯的所有產品。

1

,如果你想用存儲過程

delete from Categories where [email protected] 
delete from Products where categoryId = @categoryId 

如果,如果你刪除分類表中的東西應該從產品刪除此想總是發生.IE做到這一點。我的選擇是DELETE CASCADE.something這樣

ALTER TABLE dbo.Products 
WITH CHECK ADD CONSTRAINT FK_Products_Categories FOREIGN KEY([categoryId]) 
REFERENCES dbo.Categories([categoryId]) 
ON DELETE CASCADE 

所以當你從分類表中刪除,它會自動從產品表還

e.g刪除:delete from dbo.Categories where categoryId [email protected]

no use of writing 

    delete from Products where categoryId = @categoryId