CREATE FUNCTION F_EMAIL ( @EMAIL VARCHAR(50) ) RETURNS INT --返回1是正确;返回0是错误 BEGIN DECLARE @VALUE INT,@LEN INT DECLARE @TMP VARCHAR(50) DECLARE @CHECK1 VARCHAR(50) DECLARE @CHECK2 VARCHAR(50) DECLARE @CHECK3 VARCHAR(50) SET @TMP=RTRIM(LTRIM(@EMAIL)) SET @LEN=LEN(@TMP) IF @LEN-LEN(REPLACE(@TMP,'@',''))=1 AND @LEN-LEN(REPLACE(@TMP,'.',''))>=1 AND CHARINDEX('@',@TMP)<>1 BEGIN SET @CHECK1=LEFT(@TMP,CHARINDEX('@',@TMP)-1) SET @CHECK2=STUFF(@TMP,1,CHARINDEX('@',@TMP),'') SET @CHECK3=STUFF(@CHECK2,1,CHARINDEX('.',@CHECK2),'') SET @CHECK2=LEFT(@CHECK2,CHARINDEX('.',@CHECK2)-1) IF LEN(@CHECK1)>0 and LEN(@CHECK2)>0 AND LEN(@CHECK3)>0 BEGIN IF PATINDEX('%[^a-zA-Z0-9._-]%',@CHECK1)>0 SET @VALUE=0 ELSE BEGIN IF PATINDEX('%[^a-zA-Z0-9_-]%',@CHECK2)>0 SET @VALUE=0 ELSE BEGIN IF CHARINDEX(UPPER(@CHECK2),UPPER('gmail,QQ,163,sina,yahoo'))>0 BEGIN IF PATINDEX('%[^a-zA-Z0-9._-]%',@CHECK3)>0 SET @VALUE=0 ELSE SET @VALUE=1 END ELSE SET @VALUE=0 END END END ELSE SET @VALUE=0 END ELSE SET @VALUE=0 RETURN @VALUE END
--测试 create table tb ( id int identity, email varchar(50), CONSTRAINT chk_email CHECK (dbo.F_EMAIL(email)=1) )
insert into tb SELECT 'ASDF@163.COM' insert into tb SELECT 'ASDF@1263.COM' insert into tb SELECT 'ASDF@QQ.COM' insert into tb SELECT 'ASDF@yahoo.COM' insert into tb SELECT 'AS@DF@yahoo.COM'