約束的問題比如有一個幣別表﹐結構如下﹕ID 編號(int)
IsDefault 是否本位幣(bit)
Rate 與本位幣的兌換比率(decimal)現在此表中應該有兩個約束
1﹕有且只有一條記錄為本位幣﹐IsDefault=1的記錄數只能有一條
2﹕IsDefault=1的記錄﹐Rate的值只能是1這兩個約束應該如何寫呢?

解决方案 »

  1.   

    結構很簡單﹐是我學習的例子。ID int
    Name nvarchar(10)
    IsDefault bit
    Rate decimal(18,10)
      

  2.   

    第二个约束很简单,设置约束为:IsDefault=1 and Rate = 1不就可以了吗
    第一个实现起来有些复杂,我觉得只能用触发器来做。因为要想判断是不是有且只有一条记录满足IsDefault=1,需要查找表中的其他记录的状态,所以简单的约束难以实现。
      

  3.   

    smart_zcg:
    第二個約束應該那樣寫應該也不對吧?如果IsDefault不為1的時候﹐那條約束條件永遠為false。
      

  4.   

    (IsDefault=1 and Rate = 1) or (IsDefault<>1 and (Rate = 1 or Rate <> 1))这样是试试吧,呵呵
      

  5.   

    多謝smart_zcg﹐是速馬嗎???
    第二個可以寫成﹕
    ([IsDefault]=(1) AND [Rate]=(1) OR [IsDefault]=(0))
    后面的一部分(Rate = 1 or Rate <> 1)可以不要。