代码之家  ›  专栏  ›  技术社区  ›  Fredou

一个字段,在它接收到内容之前可以为空?

  •  2
  • Fredou  · 技术社区  · 15 年前

    如果表中有一个字段(外键),该字段可以接受空值,直到其中有内容为止,因此在此之后,该字段将拒绝空值。

    你会怎么做?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Klaus Byskov Pedersen    15 年前

    根据 MSDN ,触发器对 “扩展表之间的引用完整性。” 这正是你想要做的。所以只需使用 FOR UPDATE 如果旧值不为空,但新值为,则触发并引发错误。

    假设有一个int类型的可以为空的列 SomeId 你的桌子叫 SomeTable 以下触发器将执行该作业:

    CREATE TRIGGER CheckTrigger ON SomeTable
    FOR UPDATE
    AS
    DECLARE @OldId int, 
            @NewId int
    BEGIN
        SELECT @OldId = SomeId FROM deleted
        SELECT @NewId = SomeId FROM inserted
    
        IF NOT @OldId IS NULL AND @NewId IS NULL
        BEGIN
            RAISERROR ('No!!!!', 10,1) WITH NOWAIT
            ROLLBACK TRANSACTION
        END
    END;
    
        2
  •  1
  •   SQLMenace    15 年前

    在那种情况下,你最好是扣动扳机。

        3
  •  1
  •   White_Sox    15 年前

    首先,我想到的是创建一个触发器,它只在列为空而新值为空时更新该列。