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

确保SQL Server中的数据完整性

  •  1
  • Novitzky  · 技术社区  · 16 年前

    TransId  TermId  StartDate   EndDate     IsActiveTerm 
    -------  ------  ----------  ----------  ------------
    1        1       2007-01-01  2007-12-31  0
    1        2       2008-01-01  2008-12-31  0
    1        3       2009-01-01  2009-12-31  1
    1        4       2010-01-01  2010-12-31  0
    2        1       2008-08-05  2009-08-04  0
    2        2       2009-08-05  2010-08-04  1
    3        1       2009-07-31  2010-07-30  1
    3        2       2010-07-31  2011-07-30  0
    

    • 术语不能重叠 )

    我需要确保条款不重叠。换句话说,即使在插入/更新多行时,我也希望强制执行此条件。

    2 回复  |  直到 10 年前
        1
  •  3
  •   wallenborn    16 年前
        2
  •  2
  •   Novitzky    16 年前

    我有一个可行的解决方案:

    CREATE TRIGGER TransTerms_EnsureCon ON TransTerms
    FOR INSERT, UPDATE, DELETE AS
    BEGIN   
        IF (EXISTS (SELECT * 
                    FROM TransTerms pT
                        INNER JOIN TransTerms nT
                            ON pT.TransId= nT.OfferLettingId
                            AND nT.TransTermId = pT.TransTermId + 1
                    WHERE nT.StartDate != DATEADD(d, 1, pT.EndDate)
                        AND pT.EndDate > pT.StartDate
                        AND nT.EndDate > nT.StartDate
                    )
        )
    
        RAISERROR('Transaction violates sequenced CONSTRAINT', 1, 2)
            ROLLBACK TRANSACTION
    END
    

    P.S.非常感谢瓦伦伯恩!