Alter Table对表结构修改时,常见的错误及解决方法

时间:2022-09-08 15:09:11

最近自已开发了一个自定义表单管理系统,就是让用户自己定制自己的表,字段,通过此系统自动生成表,并提供数据录入与修改的界面。

我参照SQL Server帮助文档中Alter Table命令,对表结构进行修改时,出错了一些错误,下面特针对此常见错误做出详细说明,文章中有引用作者[Leo]的方法例题

Alter Table对表结构修改时,常见的错误及解决方法Alter Table对表结构修改时,常见的错误及解决方法代码
一、为标识列添加默认值 
下面对表MyCustomers中的字段CompanyName进行修改,使其具有默认值'Datum Corporation' 
ALTER   TABLE  MyCustomers  ADD   DEFAULT   ' Datum Corporation '   FOR   [ CompanyName ]

如果该列设置了默认值,那么对该列结构作修改操作,都将引发错误(如删除或修改该列的默认值等)
出错信息
如下:
“消息 
5074 ,级别  16 ,状态  1 ,第  1  行
对象
' DF__Tb_SalaryPar__aa__7DB89C09 '  依赖于 列 ' aa '
消息 
4922 ,级别  16 ,状态  9 ,第  1  行
由于一个或多个对象访问此列,
ALTER   TABLE   DROP   COLUMN  aa 失败。”

因为存在了default约束,此时我们需要查找出表中该列的约束名称,删除约束,再对此列进行修改
1 .查找出表中该列的约束名称
declare   @conName   varchar ( 50 )
select    @conName   = b.name  from  sysobjects b  join  syscolumns a  on  b.id  =  a.cdefault 
where  a.id  =   object_id ( ' TableName '
and  a.name  = ' ColumName '

2 . 删除约束删除该列 即可
exec ( ' alter table TableName drop constraint  '   +   @conName )
exec ( ' alter table TableName drop column ColumName ' )

二、对表distributors中address字段的其它操作
    向表中增加一个address字段: 
  
ALTER   TABLE  distributors  ADD   COLUMN   [ address ]   varchar ( 30 )
  从表中删除一个字段: 
  
ALTER   TABLE  distributors  DROP   COLUMN   [ address ]   RESTRICT
  修改字段的长度或类型: 
  
ALTER   TABLE  distributors  ALTER   COLUMN  [ address ]   varchar ( 20 )
    给一个字段增加一个非空约束:
    
ALTER   TABLE  distributors  ALTER   COLUMN   [ address ]   varchar ( 80 NOT   NULL