修改字段的数据类型、字段的默认值

来源:互联网 发布:淘宝自动批量下单软件 编辑:程序博客网 时间:2024/05/29 16:43

1。修改字段的数据类型、字段的默认值

(1)、先删除字段中的约束,再进行修改数据类型,有必要可以再加上已经删除的约束。
(2)、修改默认值时,先要删除字段中的约束,再添加新的默认值。

DECLARE @NAME NVARCHAR(128);/
SELECT @NAME=OBJ.NAME FROM SYSOBJECTS OBJ INNER JOIN /
SYSOBJECTS TAB ON OBJ.PARENT_OBJ = TAB.ID INNER JOIN /
SYSCOLUMNS COL ON OBJ.INFO = COL.COLID AND TAB.ID = COL.ID /
WHERE (TAB.NAME = '表名') AND (COL.NAME = '字段名');//查找相应字段的约束名

EXEC('ALTER TABLE [表名] DROP CONSTRAINT '+@NAME);//删除约束名

ALTER TABLE [表名] ALTER COLUMN [要修改类型的字段名] 数据类型;//修改数据类型
ALTER TABLE [表名] ADD DEFAULT '默认值' FOR [字段名] WITH VALUES;//添加默认值
2。用SQL语句修改表中字段的默认值

/*--修改/删除有默认值的字段   示例--*/
 
--测试表
  Create   Table   t1(
ID   int   Default(0),
Name   Varchar(16)   Default(16),
Memo   Varchar(255)   Default('')
)
go
 
--要求,删除name字段,将memo字段改为:   Memo   Varchar(32)   Default(32)
 
  --处理方法
 
----a.先删除要处理字段的默认值约束
declare   @s   varchar(8000)
set   @s=''
select   @s=@s+'
alter   table   ['+b.name+']   drop   constraint   ['+d.name+']'
from   syscolumns   a
join   sysobjects   b   on   a.id=b.id
join   syscomments   c   on   a.cdefault=c.id
join   sysobjects   d   on   c.id=d.id
where   b.name='t1' 
and   (a.name='name'   or   a.name='memo')
exec(@s)
 
----b.再删除字段   name
alter   table   t1   drop   column   [name]
 
----c.修改字段   memo
alter   table   t1   alter   column   [memo]   varchar(32)
 
----d.为字段   memo   添加默认值约束
set   @s='alter   table   t1   add   constraint
[df__t1__memo__'+cast(newid()   as   varchar(36))
+']   default   (32)   for   memo'
exec(@s)
go
 
  --插入数据测试
insert   t1   values(default,default)
select   *   from   t1
go
 
  --删除测试
drop   table   t1
 


ALTER   TABLE   表名   add   DEFAULT   ('修改后的默认值')   for   字段名   WITH   VALUES 
 
注:如果该字段以前已经有默认值了,在修改之前需要先将约束删除,否则会报错
删约束的SQL:
Alter   table   表名   drop   constraint   约束名
 
关于约束名,需要先查一下,
查约束名的SQL:
select   c.name   from   sysconstraints   a
inner   join   syscolumns   b   on   a.colid=b.colid
inner   join   sysobjects   c   on   a.constid=c.id
where   a.id=object_id('表名') 
and   b.name='字段名‘




 
原创粉丝点击