2010-02-09 33 views
5

Usando Microsoft SQL Server 2005 y superior, ¿qué código uso para validar que una dirección de correo electrónico es correcta?
¿Hay un tipo de datos de correo electrónico?
¿Hay una restricción de verificación de correo electrónico?
¿Existe una regla de correo electrónico?
¿Hay un disparador de correo electrónico?
¿Hay un procedimiento almacenado de validación de correo electrónico?Microsoft SQL Server correo electrónico validación

Respuesta

6

No suelo recomendar el uso de un procedimiento almacenado de CLR, pero este es un buen uso de uno. Las capacidades de manejo de cadenas de SQL no son excelentes, mientras que usar .NET Regex en un procedimiento almacenado CLR es sencillo y puede usar uno de los muchos patrones Regex existentes para satisfacer sus necesidades (como uno de these). Ver Regular Expressions Make Pattern Matching And Data Extraction Easier

defecto (algunas de DBA son muy estrictas sobre cómo activar la función CLR), tal vez esto podría ser de interés:

Working with email addresses in SQL Server

actualización: en respuesta a la pregunta en los comentarios: Un CLR stored procedure es un objeto de base de datos dentro de una instancia de SQL Server que está programado en un ensamblado creado en el entorno de ejecución de lenguaje común (CLR) de Microsoft .NET Framework, como Visual Basic o C#.

Creación de un procedimiento almacenado CLR en SQL Server implica los siguientes pasos:

  • definir el procedimiento almacenado como un método estático de una clase en un idioma apoyado por el .NET Framework. Para más información sobre cómo programar procedimientos almacenados de CLR, consulte CLR almacenado Procedimientos. A continuación, compile la clase en para compilar un ensamblado en .NET Framework mediante el compilador de lenguaje apropiado.

  • Registre el conjunto en SQL Server utilizando la instrucción CREATE ASSEMBLY . Para obtener más información acerca de cómo trabajar con ensamblados en SQL Servidor, consulte Ensamblajes.

  • Cree el procedimiento almacenado que hace referencia al ensamblado registrado por usando la instrucción CREATE PROCEDURE. Ref.

Ver Writing CLR Stored Procedures in C# - Introduction to C# (Part 1)

+0

¿Qué es un procedimiento almacenado de CLR? ¿Es eso lo mismo que un procedimiento almacenado? El acrónimo CLR me tiene perplejo. –

+1

CLR es Common Language Runtime: un procedimiento almacenado de CLR (o función, etc.) le permite escribir un procedimiento en C# pero lo llama directamente desde T-SQL. – onupdatecascade

1

Puede escribir SP administrado usando expresiones regulares de clase. la validación de correo electrónico de acuerdo con RFC es algo complejo. Simplemente consultamos AD para la existencia del usuario.

+0

¿Qué sucede si estos usuarios externos no están en AD? –

+0

Estoy de acuerdo. La pregunta original era cómo validar una dirección de correo electrónico, no validar que un usuario está en Active Directory. –

+0

@Mitch sí, seguro que funciona solo en nuestro _special_ case –

1

No hay un mecanismo integrado en SQL Server para validar las direcciones de correo electrónico.

Existen numerosas expresiones regulares que validan una dirección de correo electrónico (algunas son mucho más largas que otras), p. here, ver en particular "The Official Standard: RFC 2822" reg ex.

Ahora, SQL Server no tiene soporte integrado para ejecutar expresiones regulares, por lo que si realmente quisiera hacerlo dentro de SQL, necesitaría usar la funcionalidad CLR, es decir, escribir una función .NET que realice la validación , que luego se puede llamar desde SQL.

Sin embargo, estaría validando la dirección de correo electrónico antes, antes de que entre en la base de datos.

+0

Quiero poner la validación lo más cerca posible del nivel de la base de datos. Una regla que no se aplica a nivel de base de datos es solo una sugerencia. –

+0

Escuché lo que está diciendo, y no estoy diciendo que no estoy completamente de acuerdo ... pero, al menos * también * debería hacerse antes (es decir, cuanto antes pueda validar la entrada y atrapar datos incorrectos, antes el usuario puede ser notificado == mejor experiencia de usuario). Este es un ejemplo clásico de que puede usar SQL CLR (Common Language Runtime) para lograr esto a nivel de base de datos (código .NET que se ejecuta dentro de SQL Server) – AdaTheDev

1

Si se habilita la automatización OLE, puede crear fácilmente una UDF para manejar expresiones regulares, y luego simplemente llamar a eso:

CASE WHEN dbo.RegExFind 
    (
    '[email protected]', 
    '^[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 

no recuerdo donde me dieron el código de mi RegExFind() UDF, pero parece que el código ya está presente en StackOverflow, here.

Cuestiones relacionadas