1

我需要一个 SQL 约束(使用 SQLDeveloper)来检查一个特定的 account_id,只有一个或不存在 regular_id,例如附加的数据,包含“6”的单元格是不应该被允许的,即使它是一个不同的值。

AccountID    RegularID     OpenID
 1            5             null
 1            null          10
 1            null          11
 1            6                             <-- Forbidden
4

1 回答 1

3

最好的方法是使用触发器

  Create trigger trig_NoSingleRegId 
  On MyTable For Insert, Update
  As

        if Exists(Select * From MyTable t
                   Where AccountId In (Select AcountId From inserted)
                   Group By AccountId   
                   Having Count(Distinct regularId) > 1)     
        Begin
            RollBack Transaction
            Raiserror('Cannot have more than one RegularId per AccountId', 16, 1)
        End    

注意: Where 子句仅用于性能,将触发限制为仅触发更新或插入插入或更新的那些 accountId。

或者您也可以使用 join 来完成相同的限制。

  Create trigger trig_NoSingleRegId 
  On MyTable For Insert, Update
  As

        if Exists(Select * From MyTable t
                      join inserted I
                           on i.AccountId = t.AccountId
                   Group By t.AccountId   
                   Having Count(Distinct t.regularId) > 1)     
        Begin
            RollBack Transaction
            Raiserror('Cannot have more than one RegularId per AccountId', 16, 1)
        End           
于 2013-05-27T18:17:54.547 回答