sql脚本删除指定表的列

SQL Server数据库中使用sql脚本删除指定表的列

在SQL Server数据库中删除某一列,使用数据库管理工具直接可视化操作是很简单的,但是如果要用sql脚本呢?可能你会说很简单,直接用

ALTER TABLE [要删除的字段所在的表名]

DROP COLUMN [要删除的字段];

GO

这样不就OK了吗?

可是如果这个字段上要是有约束的话呢,就会弹出类似如下的提示:

消息 5074,级别 16,状态 1,第 1 行

对象'DF__***__***__682A18F4' 依赖于 列'***'。

消息 4922,级别 16,状态 9,第 1 行

由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN ***失败。

如何解决这个问题呢?

首先你可以要找到该字段的约束,然后删除它

--查询某个表的所有的字段约束

sp_helpconstraint [要删除的字段所在的表名]

--查询某表某字段的默认约束

select name as 约束名

from sysobjects

where id in (select cdefault

from syscolumns

where name in ( [要删除的字段])

and id=(select id

from sysobjects

where name = [要删除的字段所在的表名]))


查询到约束后,就要删除约束了

--删除字段上的约束

ALTER TABLE [要删除的字段所在的表名]

DROP 约束名;

GO

现在再来删除你要删除的字段就没有问题了,呵呵

ALTER TABLE [要删除的字段所在的表名]

DROP COLUMN [要删除的字段];

GO


--删除字段

if exists(select 1 from syscolumns where id=object_id('Branch') and name='Branch_ISstatus')

begin

  declare @name varchar(50)

  select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('Branch') and b.id=a.cdefault and a.name='Branch_ISstatus' and b.name like 'DF%'

  exec('alter table Branch drop constraint '+@name)

  alter table Branch drop column Branch_ISstatus

end