为只应包含电子邮件地址的列添加检查约束的正确方法是什么?
我们过去曾经使用过错误的软件,这些软件会在电子邮件列中添加垃圾,我希望能够防止这种情况再次发生。
请注意"完美"不期望解决方案。虽然完整的RFC合规性很好,但我认为我们大多数人都同意捕捉明显的错误,例如"域名/用户名"和" 2017-12-3"就够了。
当然,它不能拒绝任何有效的电子邮件地址。
答案 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触发器,如果它是有效的电子邮件,则检查(使用正则表达式),如果是,则允许将其添加到列中。