SQLServer之修正CHECK限制

作者:亚搏app官网    发布时间:2019-10-31 17:03    浏览:82 次

[返回]

采取SSMS数据库管理工具校勘CHECK约束

1、打开数据库,接纳数据表-》右键点击-》选拔设计(大概举办约束,选拔约束,右键点击,选拔改良,前边步骤相仿)。

图片 1

图片 2

2、接受要改过的数额列-》右键点击-》选择CHECK约束。

图片 3

3、在CHECK节制弹出框中-》选取要改善的封锁-》输入限定表达式-》输入限制名和约束描述-》采取表设计器准绳-》点击关闭。

图片 4

 4、点击保存按键(可能ctrl+s)-》刷新表查看改进结果。

图片 5

CHECK约束增多准绳

1、CHECK 约束用于节制列中的值的限量。

2、Check约束通过逻辑表明式来判别数据的管事,用来界定输入一列或多列的值的范围,在列中更新数据时,所要输入的原委必得满意Check限制的尺度,否则将无法正确输入。

3、要是对单个列定义 CHECK 节制,那么该列只同意特定的值。

4、假若对三个表定义 CHECK 约束,那么此约束会在一定的列中对值举行节制。

利用T-SQL脚本改善CHECK约束

CHECK约束改进法则必需首先删除现成的CHECK封锁,然后使用新定义再一次成立,技巧动用Transact-SQL校正CHECK约束。

语法:

--修改check约束
use 数据库名
go

--若是封锁存在则先删除
if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go

--增多封锁
alter table 表名
--with check --该节制是不是采纳于现成数据,with check代表应用于现成数量,with nocheck表示不使用于现成数据
add constraint 约束名
check
not for replication --当复制代理在表中插入或更新数据时,禁止使用该限制。
(约束表达式);
go

--向表中增添新数据或更新表中幸存数据时是还是不是禁止使用该约束。check表示校验,nocheck表示不校验
--alter table 表名
--check
--constraint 表名;
--go

--增多check限定描述
execute sp_addextendedproperty N'MS_Description', N'约束描述', N'SCHEMA', N'dbo', N'TABLE', N'表名', N'CONSTRAINT', N'限定名';
go

示例:

--修改check约束
use testss
go

--如若封锁存在则先删除
if exists(select * from sysobjects where name='u_check2')
alter table test1 drop constraint u_check2;
go

--加多封锁
alter table test1
--with check --该约束是或不是选择于现存数据,with check代表应用于现存数据,with nocheck表示不行使于现成数量
add constraint u_check2
check
not for replication --当复制代理在表中插入或更新数据时,禁止使用该限定。
(height>=100 and height <=200);
go

--向表中增多新数据或更新表中存活数据时是不是禁止使用该限定。check代表校验,nocheck表示不校验
--alter table test1
--check
--constraint u_check2;
--go

--增加check节制描述
execute sp_addextendedproperty N'MS_Description', N'改过节制', N'SCHEMA', N'dbo', N'TABLE', N'test1', N'CONSTRAINT', N'u_check2';
go

图片 6

图片 7

利用SSMS数据库管理工科具增加CHECK约束

1、连接数据库,选拔数据库,选择数据表-》右键点击(恐怕直接点击节制,右键点击,选用丰裕约束,后边步骤一样)-》接收设计。

图片 8

2、选择要丰硕约束的数码列-》右键点击-》选拔CHECK约束。

图片 9

3、在CHECK约束弹出框中点击增加。

图片 10

4、在CHECK约束弹出框中-》输入CHECK限制表达式-》输入CHECK约束名-》输入CHECK限制描述-》其他能够接纳暗中认可。

图片 11

5、点击关闭-》点击保存开关(也许ctrl+s)-》刷新表查看结果。

图片 12

CHECK约束修正优劣势

优点:

1、修改数据库CHECK约束可以保障数据的标准性和完整性。

缺点:

1:改良限制的表设计器使用准则时,大概会孳生原有数据与限制的冲突。

 

动用T-SQL脚本增添CHECK限定

当表结构存在时

增加CHECK约束时首先校验限制是或不是已存在,假诺存在应该是先删除再增添,如若不设有则平素抬高。

语法:

-- 增加叁个暗中认可约束
use 数据库名;
go

if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go

alter table 表名 add constraint 节制名 check(节制准绳),constraint 限定名 check(约束法则);
go

示例:

-- 添加贰个暗中同意节制
use testss;
go

if exists(select * from sysobjects where name='check1')
alter table test1 drop constraint check1;
go

alter table test1 add constraint check1 check(height>=170 and height<=175);
go

 图片 13

图片 14

当表结构空中楼阁时

万一表结构不设有,能够向来抬高度大限定,能够何况加上二个仍旧四个限定。

语法:

--假使表结构子虚乌有时加多check约束
use 数据库名;
go
--假使已存在表则删除
if exists(select * from sysobjects where name=表名 and xtype='U')
drop table 表名;
go
--创建表
create table 表名
(
--字段评释
列名 int identity(1,1) not null,
列名 nvarchar(50) null,
列名 nvarchar(50) null constraint 节制名 check(约束准则),
列名 nvarchar(50) null,
列名 int,
列名 int constraint 约束名 check(约束准绳)
primary key clustered(列名 asc) with(ignore_dup_key=off) on [primary], --主键索引注明
)on [primary]

--字段注释注脚
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

go

示例:

--即便表结构不设不常增加check约束
use testss;
go
--假如已存在表则删除
if exists(select * from sysobjects where name='test1' and xtype='U')
drop table test1;
go
--创建表
create table test1
(
--字段评释
id int identity(1,1) not null,
name nvarchar(50) null,
sex nvarchar(50) null constraint check1 check(sex='男' or sex='女'),
age nvarchar(50) null,
classid int,
height int constraint check2 check(height>=110 and height<=120)
primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引证明
)on [primary]

--字段注释表明
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';

go

 图片 15

图片 16

图片 17

CHECK限定优缺点

优点:

1、有限扶植列数据规范和界定,能够节制数据完整性

2、有Check限制的列能够提须求查询优化器音讯之所以升级质量

缺点:

1、插入大概涂改时数据不相符约束法规,不可能校订成功。

搜索