数据库是MS SQLServer
数据示例:
| Name | defaultValue | value | | one | true | valone | | one | false | valtwo | | one | false | valthree |
我正在采用一种限制表的方式,使每个'Name'只能有一行'defaultValue'设置为true
答案 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在更新或插入事件时验证此约束,并在事务无效时回滚该事务。