最近自已开发了一个自定义表单管理系统,就是让用户自己定制自己的表,字段,通过此系统自动生成表,并提供数据录入与修改的界面。
我参照SQL Server帮助文档中Alter Table命令,对表结构进行修改时,出错了一些错误,下面特针对此常见错误做出详细说明,文章中有引用作者[Leo]的方法例题
代码
如果该列设置了默认值,那么对该列结构作修改操作,都将引发错误(如删除或修改该列的默认值等)
“消息 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
一、为标识列添加默认值
下面对表MyCustomers中的字段CompanyName进行修改,使其具有默认值'Datum Corporation'
ALTER TABLE MyCustomers ADD DEFAULT ' Datum Corporation ' FOR [ CompanyName ]
下面对表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