2012-03-07 12 views
2

を使用してSQL Server 2008から複数のテーブルを削除するこれは一般的な質問と思われるかもしれませんが、私は私の問題を解決することができ、そうすることができない正しい答えを見つけるためにgoogled。Datalist C#

複数のテーブルがProductIDで接続されていて、メインテーブルの製品が削除されたときに、すべてのデータを削除したいと考えています。すなわち

製品ProductID - Vender - Description

ProductRatingsProductID - Rating - VisitorsCount

ProductCommentsProductID - VisitorName - Comment

私はそのような状況のためにSQLトリガが使用されていることを読んで、私はそれについては考えています私がデータソースをASCX.CSファイルで言及している場合もあります。場合によっては、 ASCXファイルのSqlDatasoruce。使用できるクエリまたはストアドプロシージャはありますか?

答えて

4

これを行う最も簡単な方法は、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 
) 

あなたがその主キーの値に外部キー制約を持つすべてのレコードを削除するために、SQL Serverの原因となるProductsテーブルから主キーの値を、削除するとどのようなことがないことです。 ProductCommentsテーブルでもこれを行うと、問題は解決します。参照テーブル内の任意のレコードに対してDELETEを明示的に呼び出す必要はありません。

参照整合性を使用していない場合は...する必要があります。

EDIT:プライマリキーのUPDATEについても同様です。 on update cascadeを指定するだけで、RIを確実にするために外部キー参照が主キーとして更新されます。

+1

データの一貫性を保つために、これはトリガーの束を実装しようとするよりもはるかに優れています。また、開発者がデータベースに適切な外部キー関係を設定するように促します。 – NotMe

+0

@ChrisLivelyで同意します。実際、トリガーはいつも最後の手段でなければならないと言っています。彼らはしばしば解決するよりも多くの問題を引き起こします。 – JamieSee

+0

ありがとうShark、この問題を解決しただけでなく、将来も非常に役立つ素晴らしい知識を私にも与えました....私は同じことがInsertとUpdateでもうまくいけばいいと思っています。 –