【发布时间】:2018-05-23 20:08:51
【问题描述】:
我使用 SQL Server 2016。我有一个名为“Member”的数据库表。
在该表中,我有这 3 列(出于我的问题的目的):
- idMember [INT - 身份 - 主键]
- memEmail
- memEmailPartner
我想阻止一行使用表中已经存在的电子邮件。
两个电子邮件列都不是强制性的,因此它们可以留空 (NULL)。
如果我创建一个新成员:
如果不是空白,则为“memEmail”和“memEmailPartner”(独立)输入的值不应在 memEmail 或 memEmailPartner 列的任何其他行中找到。
因此,如果我想用电子邮件 (dominic@email.com) 创建一行,我一定不能在 memEmail 或 memEmailPartner 中找到该值的任何出现。
如果我更新现有会员:
我不能在 memEmail 或 memEmailPartner 中找到该值的任何匹配项,除非我正在更新已在 memEmail 或 memEmailPartner 中具有该值的行 (idMembre)。
--
根据我在 Google 上阅读的内容,应该可以使用基于函数的检查约束来做某事,但我无法做到。
有人能解决我的问题吗?
谢谢。
【问题讨论】:
-
列,而不是字段...
-
行,不是记录...
-
我认为 OP 希望在
memEmail和memEmailPartner两个列中都具有唯一性,即不是独立的。 -
没错。肖恩提供的第一个解决方案对我不起作用。
-
要使用索引强制执行此操作,您需要将结构更改为
idMember, email,emailType然后它是一个简单的(过滤以忽略空值)唯一索引。
标签: sql sql-server unique-constraint unique-key check-constraint