2013-08-28 28 views
1

我有一個包含這樣的表:SQL表約束,以防止列總計超過100

  • SomeId,詮釋PK
  • Item1Weighting,詮釋
  • Item2Weighting,詮釋
  • Item3Weighting,詮釋

我想向表中添加一個約束來防止單個行上三個「加權」列的總數超過總價值爲100.

我已經完成了相當多的搜索,找不到任何幫助,因此任何建議都會被感激地收到。

感謝 千電子伏

+2

你可以用觸發器做到這一點。你使用的是什麼DBMS? – Mansfield

+0

你可以定義一個INSERT或UPDATE的觸發器來檢查它。 –

+0

我正在使用SQL Server – kmcoulson

回答

1

你可以做到這一點聲明,而不訴諸觸發器。

CREATE TABLE T 
(
SomeId Int PRIMARY KEY, 
Item1Weighting Int, 
Item2Weighting Int, 
Item3Weighting Int, 
CONSTRAINT CK_WeightingNotOver100 
    CHECK ((ISNULL(Item1Weighting,0) + 
      ISNULL(Item2Weighting,0) + 
      ISNULL(Item3Weighting,0)) <= 100) 
) 

還是要追溯其添加到現有的表

ALTER TABLE T 
ADD CONSTRAINT CK_WeightingNotOver100 
    CHECK ((ISNULL(Item1Weighting,0) + 
      ISNULL(Item2Weighting,0) + 
      ISNULL(Item3Weighting,0)) <= 100) 
+0

感謝Martin,完美地工作! – kmcoulson