Cómo detectar el formato de correo electrónico usando una declaración SQL
Crear FUNCTION F_EMAIL
(
@ EMAIL VARCHAR(50)
)
RETURNS INT -- Devuelve 1 para correcto; devuelve 0 para error
BEGIN
DECLARAR @ VALOR INT, @LEN INT
DECLARAR @TMP VARCHAR(50)
DECLARAR @CHECK1 VARCHAR(50)
DECLARAR @CHECK2 VARCHAR (50) p>
DECLARE @CHECK3 VARCHAR(50)
SET @TMP=RTRIM(LTRIM(@EMAIL))
SET @LEN=LEN(@ TMP)
IF @LEN-len(reemplazar(@ tmp,'@',''))=1 AND @len-len(reemplazar(@tmp,'.'.,'')) >=1 AND CHARINDEX ('@',@TMP)<>1
COMENZAR
SET @CHECK1=LEFT(@TMP,CHARINDEX('@',@TMP) -1) p>
SET @CHECK2=COSAS(@ TMP,1,CHARINDEX('@',@TMP),'')
SET @CHECK3=COSAS(@CHECK2, 1,CHARINDEX(' .' ,@CHECK2),'')
SET @CHECK2=LEFT(@CHECK2,CHARINDEX('.'.,@CHECK2)-1)
SI LEN(@ CHECK1)>0 Y LEN(@CHECK2)>0 Y LEN(@CHECK3)>0
COMENZAR
IF PATINDEX('%[^a-zA -Z0-9. _-]%',@ CHECK1)>0
SET @VALUE=0
ELSE
COMENZAR
IF PATINDEX(' %[^a-zA-Z0-9._-]%',@CHECK2)>0
SET @VALUE=0
ELSE
COMENZAR
IF CHARINDEX(UPPER(@CHECK2),UPPER('gmail,QQ,163,sina,yahoo'))>0
COMENZAR
IF PATINDEX ('%[^a-zA-Z0-. 9._-]%',@CHECK3)> ELSE SET @VALUE= 1
FIN
ELSE SET @VALUE=0
FIN
FIN
FIN
ELSESET @VALUE=0
FIN
FIN
ELSE SET @VALUE=0
FIN
ELSE SET @VALUE=0
RETURN @VALUE
END
--Prueba
Crear tabla tb
(
id int
identidad,
correo electrónico varchar(50),
CONSTRAINT chk_email CHECK (dbo. F_EMAIL(email)
)F_EMAIL(email)=1) p >
)
insertar en tb SELECT 'ASDF@163.COM'
insertar en tb SELECT 'ASDF@1263.COM'
insertar en tb SELECT 'ASDF@QQ.COM'
insertar en tb SELECT 'ASDF@yahoo.COM'
insertar en tb SELECT 'AS@DF@yahoo.COM'
p>/*
(el número de filas afectadas es 1)
Servidor: Mensaje 547, Nivel 16, Estado 1, Fila 1
La declaración INSERT entra en conflicto con la restricción COLUMN CHECK 'chk_email'. El conflicto ocurrió en la base de datos "Prueba", tabla "tb", columna "correo electrónico".
La declaración ha sido cancelada.
(El número de filas afectadas es 1)
(El número de filas afectadas es 1)
Servidor: Mensaje 547, Nivel 16, Estado 1, Línea 1
La instrucción INSERT entra en conflicto con la restricción COLUMN CHECK "chk_email". El conflicto ocurrió en la base de datos "Prueba", tabla "tb", columna "correo electrónico".
La declaración ha sido cancelada. */
SELECCIONAR * DE TB
/*
id de correo electrónico
----------- - -------------------------------------------------
1 ASDF@163.COM
3 ASDF@QQ.COM
4 ASDF@yahoo.COM
(Afectados El número de líneas son 3)
*/