创建触发器以维护中间表的完整性

时间:2013-11-15 19:33:36

标签: sql sql-server triggers

我用下图创建了一个数据库:

http://imagizer.imageshack.us/v2/800x489q90/440/o1yu.png

TrainerPokemon表表示一个神奇宝贝(属于一个训练师)的出现,而Pokemon表表示一个神奇宝贝'精灵'。一个特定的口袋妖怪可能可以访问某些能力,但是这个口袋妖怪的出现可能只带有一个能力(AbilityID表上的TrainerPokemon列)。

这是我的问题:我试图创建一个触发器,以防止任何其他能力(与PokemonAbility表中指定的不同)插入/更新到{{1}中的寄存器表,但我没有成功。 有没有人知道触发器?这个数据库模型的新想法也是受欢迎的。 (重要说明:我使用的是SQL Server 2012)

2 个答案:

答案 0 :(得分:0)

像这样的东西(键入我的头顶):

CREATE TRIGGER trg_pok_abil ON TrainerPokemon FOR UPDATE, INSERT
AS
BEGIN
    IF EXISTS (
        SELECT *
        FROM inserted
        WHERE inserted.AbilityID NOT (
            SELECT AbilityID
            FROM PokemonAbility
            WHERE PokemonAbility.PokemonID = inserted.PokemonID
        )
    BEGIN
        ROLLBACK
    END
END

答案 1 :(得分:0)

你可以在pokemonability,skillid上添加一个两列外键约束pokemonability和traineridkemon。

HTH