SQL Server

时间:2017-11-13 19:26:11

标签: sql sql-server tsql

为只应包含电子邮件地址的列添加检查约束的正确方法是什么?

我们过去曾经使用过错误的软件,这些软件会在电子邮件列中添加垃圾,我希望能够防止这种情况再次发生。

请注意"完美"不期望解决方案。虽然完整的RFC合规性很好,但我认为我们大多数人都同意捕捉明显的错误,例如"域名/用户名"和" 2017-12-3"就够了。

当然,它不能拒绝任何有效的电子邮件地址。

2 个答案:

答案 0 :(得分:1)

您可以使用:

alter table your_table add constraint chk_email 
CHECK
(
     email like '%_@__%.__%' 
AND (CHARINDEX('.@', email) = 0 AND CHARINDEX('..', email) = 0)  -- prevent patterns like '.@' and '..'
AND LEN(LTRIM(RTRIM(email))) - LEN(REPLACE(LTRIM(RTRIM([email])),'@','')) = 1 -- Single '@' is allowed
)

答案 1 :(得分:-1)

尝试创建一个before触发器,如果​​它是有效的电子邮件,则检查(使用正则表达式),如果是,则允许将其添加到列中。