【发布时间】:2011-01-14 20:23:48
【问题描述】:
使用 Microsoft SQL Server 2005 及更高版本,我使用什么代码来验证电子邮件地址是否正确?
是否有电子邮件数据类型?
是否有电子邮件检查限制?
有电子邮件规则吗?
有电子邮件触发器吗?
是否有电子邮件验证存储过程?
【问题讨论】:
标签: sql-server sql-server-2005
使用 Microsoft SQL Server 2005 及更高版本,我使用什么代码来验证电子邮件地址是否正确?
是否有电子邮件数据类型?
是否有电子邮件检查限制?
有电子邮件规则吗?
有电子邮件触发器吗?
是否有电子邮件验证存储过程?
【问题讨论】:
标签: sql-server sql-server-2005
我通常不推荐使用 CLR 存储过程,但这是一个很好的用途。 SQL 的字符串处理能力不是很好,而在 CLR 存储过程中使用 .NET Regex 很简单,您可以使用许多现有的 Regex 模式之一来满足您的需求(例如 these 之一)。见Regular Expressions Make Pattern Matching And Data Extraction Easier
如果做不到这一点(一些 DBA 对启用 CLR 功能非常严格),也许这可能会引起人们的兴趣:
Working with email addresses in SQL Server
更新:回答 cmets 中的问题:CLR stored procedure 是 SQL Server 实例内的数据库对象,该对象在 Microsoft .NET Framework 公共语言运行时( CLR),例如 Visual Basic 或 C#。
在 SQL 中创建 CLR 存储过程 服务器涉及以下步骤:
将存储过程定义为语言中类的静态方法 .NET 框架支持。为了 有关如何编程的更多信息 CLR 存储过程,请参阅 CLR 存储 程序。然后,将类编译为 在 .NET 中构建程序集 通过使用适当的框架 语言编译器。
使用 CREATE ASSEMBLY 在 SQL Server 中注册程序集 陈述。有关更多信息 如何在 SQL 中使用程序集 服务器,请参阅程序集。
创建引用已注册程序集的存储过程 使用 CREATE PROCEDURE 语句。 Ref。
见Writing CLR Stored Procedures in C# - Introduction to C# (Part 1)
【讨论】:
您可以使用 Regex 类编写托管 SP。根据 RFC 进行电子邮件验证是一件复杂的事情。 我们只需查询 AD 是否存在用户。
【讨论】:
SQL Server 中没有用于验证电子邮件地址的内置机制。
周围有许多正则表达式可以验证电子邮件地址(有些比其他的长得多),例如here,具体参见“官方标准:RFC 2822”reg ex.
现在,SQL Server 没有内置支持运行正则表达式,所以如果您真的想在 SQL 中执行此操作,您需要使用 CLR 功能 - 即编写一个执行验证的 .NET 函数,然后可以从 SQL 调用。
但是,我会在电子邮件地址进入数据库之前提前验证它。
【讨论】:
如果启用了 OLE 自动化,您可以轻松创建一个 UDF 来处理正则表达式,然后调用它:
CASE WHEN dbo.RegExFind
(
'joe@stackoverflow.com',
'^[a-z0-9][a-z0-9._-]*@[a-z0-9][a-z0-9.-]*[a-z0-9]\.[a-z][a-z]+$',
1 -- Case-insensitive or not
) = 1 THEN 'OK' ELSE 'Not OK' END
我不记得在哪里获得了 RegExFind() UDF 的代码,但看起来代码已经存在于 StackOverflow 上,here。
【讨论】:
正如其他人所提到的,您可以使用正则表达式来验证电子邮件,但准确性有限。
-- you could, but not recommended
SELECT email, email LIKE '%_@_%.__%' AS isVaild FROM people;
您可能会发现使用Real Email 之类的服务来验证电子邮件会更好,它不仅会检查电子邮件是否正确,还会检查域和帐户是否有效。
您可以将数据导出为 csv,然后对其进行验证。更多信息请见How to validate emails in an sql database。
【讨论】: