2011-08-09 6 views
4

これは外部キーで行うことができますが、追加できないか、新しいレコードを挿入するときに奇妙なことが起こることがあります。このデータベースには多くのストアドプロシージャがあり、ストアドプロシージャについては何も知らないので、それらが何をしているのかわかりません。特定のProductIDを削除してProductテーブルから削除するトリガーを見つけられるように助けてくれることを願っていました。 CompanyLink、TargetLink、およびCategoryLinkという表にもあります。今のよう 複数のテーブルから1つのレコードを削除するSQL Serverのトリガー

は、私がProductテーブルからのProductIDを削除すると、私は手動でそれが挿入された他の3つのテーブルからそれを削除する必要があります。

答えて

8

あなたはこのようなトリガーによってそれを行うことができます。

CREATE TRIGGER [dbo].[ProductDeleted] 
ON [dbo].[Product] 
AFTER DELETE 
AS 
BEGIN 

    DELETE FROM CompanyLink WHERE ProductID = (SELECT TOP 1 ProductID FROM DELETED) 
    DELETE FROM TargetLink WHERE ProductID = (SELECT TOP 1 ProductID FROM DELETED) 

END 

明らか構文は完璧ではないかもしれませんが、これは何が必要に近接しています。

+1

SQLサーバートリガーはステートメントレベルであり、DELETEステートメントがProductから複数の行を削除すると、最初のものだけが子テーブルから削除されるため、(SELECT top 1 ...)の存在については疑問に思うでしょう。 –

+0

それは私が思ったほど難しくはありません。ケン、あなたはSELECTトップ1以外を使って何を提案しますか? – Jamie

+0

だから私は、この持っている:DELETE のProductID =(DELETED FROMのProductIDを選択) は、商品コード=は、(DELETED FROMのProductIDを選択)のTargetLink。DELETE FROM CompanyLink。DELETE FROM BEGIN AS AFTER dbo.Product ON TRIGGER dbo.ProductDeleted をCREATEを は、それが働いたよう END – Jamie

関連する問題