我有一个有 2 列的表
CREATE TABLE mytable
(
x int
y char(1)
)
我想对 x 的值强制约束 y。
例如,当 x = 5 时我想要 y='a',当 x = 12 时 y = 'b' 等等。是否可以在 SQL Server 2008 中执行?就像是
case when x = 5 then y='a' end
后一种说法不起作用,因此,我要求模拟。
我有一个有 2 列的表
CREATE TABLE mytable
(
x int
y char(1)
)
我想对 x 的值强制约束 y。
例如,当 x = 5 时我想要 y='a',当 x = 12 时 y = 'b' 等等。是否可以在 SQL Server 2008 中执行?就像是
case when x = 5 then y='a' end
后一种说法不起作用,因此,我要求模拟。
您可以将表达式设置为:
( x = 5 AND y = 'a' ) OR ( x = 12 AND y = 'b' )
如果您愿意,请添加更多规则...
使用以下 SQL 将约束添加到您的表中:
ALTER TABLE dbo.myTable WITH NOCHECK
ADD CONSTRAINT CK_myTable
CHECK (( x = 5 AND y = 'a' ) OR ( x = 12 AND y = 'b' ));
查看此参考以获取更多示例:
CREATE TABLE mytable
(
x int not null,
y char(1) not null,
constraint CK_mytable_myrules CHECK (
1 = CASE
WHEN x=5 AND y='a' THEN 1
WHEN x=12 AND y='b' THEN 1
/* More rules here */
ELSE 0 END
)
CASE表达式总是必须返回一个值。布尔值不是 SQL 的一部分。
或者,如果一般规则是“如果我们没有匹配任何这些规则,让它通过”,那么您有两个选择 - 嵌套 CASE 或“后备”规则(我自己的,刚刚发明的术语):
嵌套案例:
1 = CASE
WHEN x=5 THEN
CASE WHEN y='a' THEN 1
ELSE 0 END
WHEN x=12 THEN
CASE WHEN y='b' THEN 1
ELSE 0 END
/* More rules here */
ELSE 1 END
或其他方式:
1 = CASE
WHEN x=5 AND y='a' THEN 1
WHEN x=5 THEN 0
WHEN x=12 AND y='b' THEN 1
WHEN x=12 THEN 0
/* More rules here */
ELSE 1 END
可以设置这样的约束。参照。链接文本 您需要定义一个合适的 UDF。
啊,好像还有其他的可能。