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)

我想为两个 FK 设置一个删除约束,以防 ArticelPrice 或 SpecialArticlePrice 将被删除,Foo 记录也应该被删除。唯一的合同(在开发者网站上)是,Foo 的记录将只包含一个 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 TRIGGERS在您的 ArticlePrice 和 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

此外,您不应将价格存储为浮点数。用途moneydecimal类型

于 2012-07-22T07:22:39.713 回答
0

我不知道我是否得到了您真正想要实现的目标但是:

如果您在 SSMS 中设计 Foo-Table,则必须插入外键。然后您需要设置 SpecialPrice-Table 和 ArticlePrice-Table 的外键的“插入和更新规范”(与表 Foo 的关系)-> 只需将 Delete Rule 设置为Cascade

因此,每次您删除 ArticlePrice 或 SpecialArticlePrice 时,引用这些项目的行也应该被删除。

于 2012-07-17T07:53:23.843 回答
0

您可以将触发器与存储过程一起使用。 SQL Server 2008 - 多个级联 FK - 我需要触发器吗?

非常感谢, Girish

于 2012-07-22T07:01:24.490 回答