Microsoft SQL Server电子邮件验证

时间:2010-02-09 14:41:25

标签: sql-server sql-server-2005

使用Microsoft SQL Server 2005及更高版本,我使用什么代码来验证电子邮件地址是否正确? 是否有电子邮件数据类型?
是否有电子邮件检查约束?
是否有电子邮件规则?
是否有电子邮件触发器?
是否有电子邮件验证存储过程?

5 个答案:

答案 0 :(得分:6)

我通常不推荐使用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

更新:回复评论中的问题:CLR stored procedure是SQL Server实例中的数据库对象,该对象在以Microsoft .NET Framework公共语言创建的程序集中编程运行时(CLR),例如Visual Basic或C#。

  

在SQL中创建CLR存储过程   服务器涉及以下步骤:

     
      
  • 将存储过程定义为语言中类的静态方法   .NET Framework支持。对于   有关如何编程的更多信息   CLR存储过程,请参阅CLR存储   流程。然后,将类编译为   在.NET中构建程序集   框架通过使用适当的   语言编译器。

  •   
  • 使用CREATE ASSEMBLY在SQL Server中注册程序集   声明。有关的更多信息   如何在SQL中使用程序集   服务器,请参阅程序集。

  •   
  • 创建引用已注册程序集的存储过程   使用CREATE PROCEDURE语句。 Ref

  •   

请参阅Writing CLR Stored Procedures in C# - Introduction to C# (Part 1)

答案 1 :(得分:1)

您可以使用Regex类编写托管SP。根据RFC的电子邮件验证是复杂的事情。 我们只是查询AD是否存在用户。

答案 2 :(得分:1)

SQL Server中没有用于验证电子邮件地址的内置机制。

周围有许多正则表达式验证电子邮件地址(有些比其他地方长得多),例如here,特别参见“官方标准:RFC 2822”reg reg。

现在,SQL Server没有内置支持来运行正则表达式,因此如果您真的想在SQL中执行它,则需要使用CLR功能 - 即编写执行验证的.NET函数,然后可以从SQL调用它。

但是,在进入数据库之前,我会先验证电子邮件地址。

答案 3 :(得分:1)

如果启用了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

答案 4 :(得分:0)

正如其他人所提到的,您可以使用正则表达式来验证电子邮件,但准确性有限。

-- you could, but not recommended
SELECT email, email LIKE '%_@_%.__%' AS isVaild FROM people;

您可能会发现,使用Real Email之类的服务来验证电子邮件会更好,该服务不仅检查电子邮件是否正确,还检查域和帐户是否有效。

您可以将数据导出为csv,然后进行验证。有关更多信息,请参见How to validate emails in an sql database