數據庫檢查約束是MS SQLServer的爲標誌列
數據例如:
| Name | defaultValue | value | | one | true | valone | | one | false | valtwo | | one | false | valthree |
制約臺,使得每一個「名稱」的方式後,我只能有一排用'默認值」設置爲true
數據庫檢查約束是MS SQLServer的爲標誌列
數據例如:
| Name | defaultValue | value | | one | true | valone | | one | false | valtwo | | one | false | valthree |
制約臺,使得每一個「名稱」的方式後,我只能有一排用'默認值」設置爲true
這樣創建一個計算列:
ALTER TABLE yourtable
ADD ValueCheck AS CASE defaultValue
WHEN true THEN 1
WHEN false THEN NULL
END
,然後添加獨特CON (名稱,ValueCheck)
您可以使用TRIGGER驗證此更新或插入事件的約束,並在事務無效時回滾該事務。
但請確保您考慮快照隔離的影響http://sqlblog.com/blogs/hugo_kornelis/archive/tags/Isolation/default.aspx – 2010-07-27 10:41:15
我喜歡Michael的想法,但它只會讓你在SQL Server中爲每個名稱創造一個錯誤的值。爲了避免這種情況如何使用
ALTER TABLE yourtable
ADD [ValueCheck] AS
(case [defaultValue] when (1) then ('~Default#[email protected]') /*Magic string!*/
else value end) persisted
然後爲(Name,ValueCheck)添加唯一約束。
我假設名稱,值組合將是唯一的。如果值列不允許爲NULL,那麼使用NULL
而不是魔術字符串將是更可取的,否則選擇不能出現在數據中的字符串(例如,如果值列僅允許100個字符,則爲101個字符)
I + 1ed this但後來意識到它不起作用。 SQL Server中的唯一約束只允許1 NULL。 – 2010-07-27 10:30:54
你說得對。 :( – 2010-07-27 10:57:52
如果yourtable有一個關鍵列(例如.keyid),那麼將NULL更改爲keyid上面應該可以工作 – 2010-07-27 12:28:02