1

私は次のテーブル構造を持っています(実演するために架空のものです):

ArticlePrice
------------
Id (int, identity)
Price (float)

SpecialArticlePrice
-------------------
Id (int, identity)
ArticlePriceId (int, FK to AriclePrice.Id)
SpecialPrice (float)

これらとテーブルの間には、削除制約があります。

Foo
-----
Id (int, identity)
ArticlePriceId (int, NULL, FKto ArticlePrice.Id)
SpecialArticlePriceId (int, NULL, FK to SpecialArticlePrice.Id)
Price (int)

ArticelPrice または SpecialArticlePrice のいずれかが削除される場合に備えて、両方の FK に削除制約を設定したいと思います。Foo レコードも削除する必要があります。(開発者サイトでの) 唯一の契約は、Foo のレコードが 1 つの FK リレーションシップのみを保持することです。

例:

INSERT INTO Foo (ArticlePrice, SpecialArticlePrice, Price) VALUES (13, NULL, 20.0) 
INSERT INTO Foo (ArticlePrice, SpecialArticlePrice, Price) VALUES (NULL, 3, 134.25)

このシナリオをどのように解決できますか?

どうもありがとうございました。よろしく、 ダニー

4

3 に答える 3

2

DELETE TRIGGERSArticlePrice および SpecialArticlePrice テーブルで作成する必要があります。

create trigger trgArticlePriceDelete on ArticlePrice for delete
as
begin
delete foo 
from foo
        inner join deleted on foo.ArticlePriceID = deleted.ID
end
go

create trigger trgSpecialArticlePriceDelete on SpecialArticlePrice for delete
as
begin
    delete foo 
    from
        foo
        inner join deleted on foo.SpecialArticlePriceID = deleted.ID
end
go

また、価格を float として保存しないでください。使用moneyまたはdecimalタイプ

于 2012-07-22T07:22:39.713 に答える
0

ストアド プロシージャと一緒にトリガーを使用することもできます。 SQL Server 2008 - 複数のカスケード FK - トリガーは必要ですか?

どうもありがとう、ギリッシュ

于 2012-07-22T07:01:24.490 に答える
0

あなたが本当に達成したいことを私が得たかどうかはわかりませんが:

SSMS で Foo-Table を設計する場合は、外部キーを挿入する必要があります。次に、 SpecialPrice-Table と ArticlePrice-Table の外部キーの「挿入と更新の仕様」(テーブル Foo との関係) を設定する必要があります --> 削除ルールをCascadeに設定するだけです。

その結果、ArticlePrice または SpecialArticlePrice を削除するたびに、それらのアイテムを参照する行も削除する必要があります。

于 2012-07-17T07:53:23.843 に答える