我有3列,Part1
,Part2
和OnePiece
。
Part1
可以分配到[1,2,3,4,5]。
Part2
可以分配到[1,2,3,4]。
OnePiece
它的类型为Bit
。
Part1
和Part2
都不能具有相同的值,如果Part1
为5,那么Part2
就无法拥有值。< / p>
我要做的是将OnePiece
设置为1,并确保Part2
= 5时Part1
不接受任何值。
我该怎么做?
我会更多地澄清我的要求。
列OnePiece
是一个标记,会自动计算,如果Part1
= 5则设置为1,对于Part2
,如果Part1
它不能设置为任何值Part1
= 5。
原因是当Part2
= 5时,它意味着它是单件产品,因此没有{{1}}且不得允许任何其他值。
所以这会让我猜两件事;触发器和检查约束。我希望我提供了更多细节。
答案 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))
感谢每位有助于回答此问题的用户。