检查标志列的约束

时间:2010-07-27 09:24:45

标签: sql sql-server

数据库是MS SQLServer

数据示例:

| Name | defaultValue |  value   |
| one  |     true     | valone   |
| one  |     false    | valtwo   |
| one  |     false    | valthree |

我正在采用一种限制表的方式,使每个'Name'只能有一行'defaultValue'设置为true

3 个答案:

答案 0 :(得分:1)

像这样创建一个计算列:

  ALTER TABLE yourtable
  ADD ValueCheck AS CASE defaultValue
     WHEN true THEN 1
     WHEN false THEN NULL
  END

然后为(Name,ValueCheck)添加唯一约束

答案 1 :(得分:1)

我喜欢迈克尔的想法,但它只会在SQL Server中为每个名称提供一个假值。为了避免这种情况,请使用

  ALTER TABLE yourtable
  ADD [ValueCheck] AS 
     (case [defaultValue] when (1) then ('~Default#?@') /*Magic string!*/
                 else value  end) persisted

然后为(Name,ValueCheck)添加唯一约束。

我假设名称,价值组合将是唯一的。如果value列不允许NULL,那么使用NULL而不是魔术字符串会更好,否则选择一个不能出现在数据中的字符串(例如,如果值列只允许100个字符,则为101个字符)

答案 2 :(得分:0)

您可以使用TRIGGER在更新或插入事件时验证此约束,并在事务无效时回滚该事务。