SQLServer之修改DEFAULT约束

2019-03-23 11:06栏目:程序人生

使用SSMS数据库管理工具修改DEFAULT约束

1、连接数据库、选择数据表-》右键点击-》选择设计。

ca888会员登录 1

2、在表设计器窗口-》选中要修改的数据列-》在列属性中找到默认值绑定-》进行修改。

ca888会员登录 2

3、点击保存(或者ctrl s)-》关闭表设计器-》刷新表-》重新打开表设计器查看。

ca888会员登录 3

DEFAULT约束添加规则

1、若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。

2、如果“默认值”字段中的项替换绑定的默认值(以不带圆括号的形式显示),则将提示你解除对默认值的绑定,并将其替换为新的默认值。

3、若要输入文本字符串,请用单引号 (') 将值括起来;不要使用双引号 ("),因为双引号已保留用于带引号的标识符。

4、若要输入数值默认值,请输入数值并且不要用引号将值括起来。

5、若要输入对象/函数,请输入对象/函数的名称并且不要用引号将名称括起来。

修改数据列

在开发和生产过程中,列名的拼写错误或者列名的更改是需要操作数据表的,大多数情况下都是不需要修改的.

以下几种情况下我们并不能直接修改数据列:

1、用于索引的列。 
2、用于 CHECK、FOREIGN KEY、UNIQUE 或 PRIMARY KEY 约束的列。 
3、与默认值(由 DEFAULT 关键字定义)相关联的列,或绑定到默认对象的列。 
4、绑定到规则的列。 

 

使用T-SQL脚本修改DEFAULT约束

DEFAULT约束修改规则必须首先删除现有的DEFAULT约束,然后使用新定义重新创建,才能使用Transact-SQL修改DEFAULT约束。

语法:

--使用数据库
use 数据库名;
go
--判断要创建的约束是否已存在
if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go
--添加默认值约束
alter table 表名 add constraint 约束名 default 约束值 for 列名;
go

示例:

--使用数据库
use testss;
go
--判断要创建的约束是否已存在
if exists(select * from sysobjects where name='default1')
alter table test1 drop constraint default1;
go
--添加默认值约束
alter table test1 add constraint default2 default 18 for age;
go

 ca888会员登录 4

ca888会员登录 5

使用SSMS数据库管理工具添加DEFAULT约束

1、连接数据库,选择数据表-》右键点击-》选择设计。

ca888会员登录 6

2、在表设计窗口中-》选择数据列-》在列属性窗口中找到默认值或绑定-》输入默认值(注意默认值的数据类型和输入格式)。

ca888会员登录 7

3、点击保存按钮(或者ctrl s)-》刷新表-》再次打开表查看结果。

ca888会员登录 8

使用SSMS数据库管理工具修改列

1、连接数据库,打开要修改的数据库,选择数据表-》右键点击-》选择设计。

ca888会员登录 9

2、在新打开的窗口视图中-》点击要修改的行-》可以修改列名、列类型、是否可空、属性等-》修改完成点击保存按钮(或者ctrl s)。

ca888会员登录 10

1、用SQL创建文件夹

总结

1、每个字段只能有一个默认约束。
2、如果默认约束设置的值大于字段所允许的长度,则截取到字段允许长度。
3、不能加入到带有IDENTITY属性或者TIMESTAMP的字段上。
4、如果字段的数据类型为用户自定义类型,而且已有默认值绑定在此数据类型上,则不允许再次使用默认值。

 

使用T-SQL脚本添加DEFAULT约束

使用T-SQL脚本修改列

ca888会员登录 11ca888会员登录 12用SQL创建文件夹

当表结构已存在时

首先判断表中是否存在默认约束,如果存在则先删除默认约束再添加,如果不存在则直接添加。

语法:

use 数据库
go
--判断默认约束是否存在,如果存在则先删除,如果不存在则直接添加
if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go
--给指定列添加默认约束
alter table 表名 add constraint 约束名 default(约束值) for 列名;
go

示例:

use [testss]
go
--判断默认约束是否存在,如果存在则先删除,如果不存在则直接添加
if exists(select * from sysobjects where name='defalut_height')
alter table [testss].[dbo].[test1] drop constraint defalut_height;
go
--给指定列添加默认约束
alter table [testss].[dbo].[test1] add constraint defalut_height default(160) for height;
go

ca888会员登录 13

ca888会员登录 14

修改列名

语法:exec sp_rename  表明.旧列名,新列名; 

示例:exec sp_rename '[test1].height6','height7'; 

ca888会员登录 15

ca888会员登录 16

-- 1、显示高级选项
sp_configure 'show advanced options',1;
reconfigure; --更改当前配置
go

创建表时添加默认约束

首先判断表是否选在,如果存在则先删除表再添加,如果不存在则直接添加。

语法:

--创建新表时添加默认约束
--数据库声明
use 数据库名
go
--如果表已存在则先删除表再创建,如果表不存在则直接创建
if exists(select * from sysobjects where name=表名 and type ='U')
drop table 表名;
go
--建表语法声明
create table 表名
(
--字段声明
列名 列类型 identity(1,1) not null,
列名 列类型) null,
列名 列类型 null,
列名 列类型 null,
列名 列类型,
列名 列类型 constraint 约束名 default 默认值,
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

示例:

--创建新表时添加默认约束
--数据库声明
use testss
go
--如果表已存在则先删除表再创建,如果表不存在则直接创建
if exists(select * from sysobjects where name='test1' and type ='U')
drop table test1;
go
--建表语法声明
create table test1
(
--字段声明
id int identity(1,1) not null,
name nvarchar(50) null,
sex nvarchar(50) null,
age nvarchar(50) null,
classid int,
height int constraint default_he default 166,
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

ca888会员登录 17

ca888会员登录 18

修改列数据类型

语法:alter table 数据库名.dbo.表名 alter column 列名 类型 [约束];  

示例:alter table [testss].dbo.[test1] alter column height7 int null;  

ca888会员登录 19

ca888会员登录 20

-- 2、启用 xp_cmdshell:
sp_configure 'xp_cmdshell',1; -- 1代表“用户ID”
reconfigure
go

DEFAULT约束优缺点

优点:

1、使用默认值可以减少代码量,新增数据时可以不用写新增默认值列,执行新增操作时时默认填充。

2、较有利于进行统计和分析,以及方便程序逻辑操作。

缺点:

1、使用不为NULL的默认值,占用了更多的存储空间。

 

修改列是否可空

语法:alter table 数据库名.dbo.表名 alter column 列名 类型 约束;  

示例:alter table [testss].dbo.[test1] alter column height7 int not null;

ca888会员登录 21

ca888会员登录 22

-- 附:用SQL创建文件夹(手动):
       --> SQL Server 外围应用配置器
       --> 功能的外围应用配置器 
       --> 启用xp_cmdshell

修改列默认值

ca888会员登录,如果默认值不存在

语法:alter table 数据库名.dbo.表名 add constraint 约束名 default 默认值 for 列名;

示例:alter table [testss].dbo.[test1] add constraint df_h default 1 for height7;

ca888会员登录 23

ca888会员登录 24

-- 然后你就可以使用xp_cmdshell了。

如果默认值存在

语法:

--第一步判断默认值否存在,如果存在就删除,如果不存在则不删除
if exists (select * from sys.check_constraints where object_id = object_id(默认值约束名) and parent_object_id = object_id(表名))
alter table 表名 drop constraint 默认值约束名

--第二步添加默认值

alter table 表名 add constraint  约束名 default 默认值 for 列名;

示例:

--第一步判断约束是否存在,如果存在就删除,如果不存在则不删除
if exists (select * from sys.check_constraints where object_id = object_id('df_h') AND parent_object_id = object_id('[testss].dbo.[test1]'))
alter table [testss].dbo.[test1] drop constraint df_h

--第二步添加默认值

alter table [testss].dbo.[test1] add constraint df_h default 2 for height7;

ca888会员登录 25

-- 在C盘建立myDatabase文件夹
xp_cmdshell 'mkdir c:myDatabase'; 
go -- 或 xp_cmdshell 'md c:myDatabase' 

总结

在开发或者生产数据库中,数据列一经建好,不要轻易改动,随意改动可能会引起数据库的级联操作失败和代码错误。

 

 

 2、用SQL创建数据库

ca888会员登录 26ca888会员登录 27用SQL创建数据库

use master
go -- 批处理的结束

--在[master]中查询[myDBName]是否存在
if exists(select * from sysdatabases where name='myDBName')
   drop database myDBName

create database myDBName --创建数据库
on primary
(
  name='myDBName',
  filename='C:myDatabasemyDBName.mdf',
  size=3mb,
  maxsize=100mb, -- unlimited:无限制的
  filegrowth=2mb 
)
, -- 注意:逗号不能丢!
(
  name='myDBName_1',
  filename='C:myDatabasemyDBName_1.ndf',
  size=3mb,
  maxsize=unlimited,
  filegrowth= 10%
)
log on
(
  NAME = N'myDBName_log', 
  FILENAME = N'C:myDatabasemyDBName_log.ldf' , 
  SIZE = 1024kb, 
  MAXSIZE = 1gb, 
  FILEGROWTH = 1mb
)

collate Chinese_PRC_CI_AS --定义排序规则
go

-- 删除数据库
-- drop database myDBName;

 

 

3、用SQL创建数据表

ca888会员登录 28ca888会员登录 29用SQL创建数据表

use myDBName
go
---------------- 删除学生信息表 ----------------
if exists(select * from sysobjects where name='stuInfo')
   drop table stuInfo;
---------------- 创建学生信息表 ----------------
create table stuInfo
(
   stuNo       char(6) primary key,
   stuName     varchar(20) not null,
   stuGender   bit default(1),
   stuAge      int check(stuAge between 0 and 100),
   stuBirthday datetime null default('2000-2-2'),
   stuSeat     smallint identity(1,1),--座位号:标识列
   stuAddress  text, --默认允许为空
   stuID       numeric(18,0) unique --身份证 
)

---------------- 添加约束 ----------------

-- 主键约束:PK_字段名
alter table stuInfo
add constraint PK_stuNo primary key(stuNo);

版权声明:本文由ca888发布于程序人生,转载请注明出处:SQLServer之修改DEFAULT约束