SQL Server - 根据其他列设置列值

时间:2014-08-23 08:45:31

标签: sql sql-server

我有3列,Part1Part2OnePiece

Part1可以分配到[1,2,3,4,5]。

Part2可以分配到[1,2,3,4]。

OnePiece它的类型为Bit

Part1Part2都不能具有相同的值,如果Part1为5,那么Part2就无法拥有值。< / p>

我要做的是将OnePiece设置为1,并确保Part2 = 5时Part1不接受任何值。

我该怎么做?


我会更多地澄清我的要求。

OnePiece是一个标记,会自动计算,如果Part1 = 5则设置为1,对于Part2,如果Part1它不能设置为任何值Part1 = 5。

原因是当Part2 = 5时,它意味着它是单件产品,因此没有{{1}}且不得允许任何其他值。

所以这会让我猜两件事;触发器和检查约束。我希望我提供了更多细节。

3 个答案:

答案 0 :(得分:1)

如果Part2为1且OnePiece为5,那么Part5禁止值的检查约束:

alter table YourTable add constraint CHK_YourTable
    check (OnePiece <> 1 or Part1 <> 5 or Part2 is null)

答案 1 :(得分:1)

您可以添加检查约束以确保:

ALTER TABLE my_table
ADD CONSTRAINT my_table_chk
CHECK (part1 <> part2 -- "Part1 and Part2 can't have the same values"
       AND 
       (part1 <> 5 OR part2 IS NUILL) -- "if Part1 is 5 then Part2 can't have a value"
      );

答案 2 :(得分:0)

我已使用此公式将OnePiece列设为计算列:

(CONVERT([bit],CASE [Part1] WHEN (5) THEN (1) ELSE (0) END,0))

对于约束:

ALTER TABLE [AssemblyData]
ADD CONSTRAINT [CHK_AssemblyData]
CHECK  (([Part2]<>(5))
       AND
       ([Part2]<>[Part1])
       AND
       ([Part1]<>(5) OR [Part2] IS NULL))

感谢每位有助于回答此问题的用户。