SQL约束大全

邮箱约束

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’

/*
(所影响的行数为 1 行)

服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 ‘chk_email’ 冲突。该冲突发生于数据库 ‘Test’,表 ‘tb’, column ‘email’。
语句已终止。

(所影响的行数为 1 行)

(所影响的行数为 1 行)

服务器: 消息 547,级别 16,状态 1,行 1
INSERT 语句与 COLUMN CHECK 约束 ‘chk_email’ 冲突。该冲突发生于数据库 ‘Test’,表 ‘tb’, column ‘email’。
语句已终止。*/

SELECT * FROM TB

/*
id email


1 ASDF@163.COM
3 ASDF@QQ.COM
4 ASDF@yahoo.COM

(所影响的行数为 3 行)
*/
“`

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值