我需要添加一个包含两列的约束,说明其中一列中是否存在任何给定的值,然后:
1)它不能在同一列中重复。
2) 它也不能在其他列中重复。
我们正在寻找的约束是PrimaryEmail和SecondaryEmail。
这将是无效的:
UserId PrimaryEmail SecondaryEmail
231 joe@yahoo.com Null
424 smo@gmail.com joey@yahoo.com
Run Code Online (Sandbox Code Playgroud)
因为“joe@yahoo.com”出现在第一列中,因此无论它在哪一行,它都不能出现在第二列中。
是否可以在 SQL Server 2008 中定义这种类型的约束?
我们首先定义了一个只用于电子邮件的表,但我们已经从该模型恢复到支持两个硬列,原因有很多,包括:查询速度、查询复杂性以及用户使用多个电子邮件帐户的概率按顺序主动降低一个后的数量级。
这定义了一个传统的两列约束,但它在两列之间的每行基础上,并没有给我们我们所追求的:
CREATE UNIQUE NONCLUSTERED INDEX idx_UniqueEmail_notnull
ON UserProfile (PrimaryEmail, SecondaryEmail)
WHERE PrimaryEmail IS NOT NULL and SecondaryEmail IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)