SQL Server 修改表结构的实例代码讲解
成功志
SQL Server 修改表结构的实例代码讲解
2012-4-7 ok12
SQL Server数据库修改表结构和字段类型的相关知识及其操作实例使本文我们主要要介绍的内容,接下来我们就来一一介绍这部分内容。

  ①:更改字段类型长度


  ALTER TABLE 表名


  ALTER COLUMN 字段名 类型的长度--varchar(50)


  例:把城市表的城市字段原来长度为20改为30


  ALTER TABLE city


  ALTER COLUMN cname varchar(30)


  ②:更改字段类型


  ALTER TABLE 表名


  ALTER COLUMN 字段名 更改后的类型


  例:把城市表中的城市名字段从varchar类型改为int


  ALTER TABLE city


  ALTER COLUMN cname int


  ③:添加not null 约束


  ALTER TABLE 表名


  ALTER COLUMN 字段名 字段类型 NOT NULL


  例:把cid(城市编号)不能输入空值


  ALTER TABLE city


  ALTER COLUMN cid int NOT NULL


   ④:设置主键


  ALTER TABLE 表名


  ADD CONSTRAINT 主键名 PRIMARY KEY(字段名)


  例:把cid(城市编号)设置为主键


  ALTER TABLE city


  ADD CONSTRAINT PK_cid PRIMARY KEY(cid)


  ⑤:添加字段名


  ALTER TABLE 表名


  ADD 字段名 字段类型 DEFAULT NULL


  例:给city表添加一个pic字段


  ALTER TABLE city


  ADD pic varchar(60) DEFAULT NULL


  ⑥:更改字段名


  A.MySQL


  ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型


  B.Oracle:


  ALTER TABLE 表名


  RENAME COLUMN 原字段名 TO 新字段名 ;


  C.SQL Server:


  EXEC sp_rename ‘表名.字段名','更改后的字段名','COLUMN'


 


在SQL Server 中,如果给表的一个字段设置了默认值,就会在系统表sysobjects中生成一个默认约束。

如果想删除这个设置了默认值的字段(假设此字段名column1),

执行“ALTER TABLE table1 DROP COLUMN column1”时就会报错:

The object 'DF__xxxxxxxxxxx' is dependent on column 'column1'.

ALTER TABLE DROP COLUMN column1failed because one or more objects access this column.


所以在删除此字段时需要先将系统表中的对应默认约束删除, 可以使用下面的脚本进行删除:

-- this script drops the default constraint which is generated by the setting of default value.

DECLARE @tablename VARCHAR(100), @columnname VARCHAR(100), @tab VARCHAR(100)

SET @tablename='CountryGroupEmailAndWaitAux'

SET @columnname='actionOfHasNoValidEmail'


declare @defname varchar(100)

declare @cmd varchar(100)


select @defname = name

FROM sysobjects so

JOIN sysconstraints sc

ON so.id = sc.constid

WHERE object_name(so.parent_obj) = @tablename

AND so.xtype = 'D'

AND sc.colid =

(SELECT colid FROM syscolumns

WHERE id = object_id(@tablename) AND

name = @columnname)


select @cmd='alter table '+ @tablename+ ' drop constraint '+ @defname

if @cmd is null print 'No default constraint to drop'

exec (@cmd)


在删除对应的默认约束后,执行:

ALTER TABLE table1 DROP COLUMN column1

即可删除字段。

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容