【SqlServer】修改字段类型提示默认值约束依赖导致无法修改
参考
https://www.cnblogs.com/longxinyv/p/16702758.html
https://www.cnblogs.com/jialanyu/p/13469848.html
创建表
对Name添加默认值,使其有默认值约束
create table MyChange ( Id int, Name varchar(50) default('') )
执行后
调整类型
调整varchar的长度
alter table MyChange alter column Name varchar(100)
执行成功
调整为nvarchar的长度
alter table MyChange alter column Name nvarchar(100)
执行失败,提示 对象'DF__MyChange__Name__05D8E0BE' 依赖于 列'Name'。
处理方式
对约束先删除再创建,可执行下面的语句,对默认值约束的配置进行备份
SELECT [表名]=tab.name ,[列名]=col.name ,[Default约束名]=df.name ,df.definition ,' ALTER TABLE [dbo].['+tab.name+'] ADD CONSTRAINT ['+df.name+'] DEFAULT '+df.definition+' FOR ['+col.name+'] ' +'; ' as AddSql ,' ALTER TABLE '+tab.name+' DROP CONSTRAINT '+df.name+' ; ' as DropSql FROM sys.default_constraints df JOIN sys.tables tab ON (df.parent_object_id = tab.object_id) JOIN sys.columns col ON (df.parent_object_id = col.object_id AND df.parent_column_id = col.column_id)
最终步骤
1、删除默认值约束
ALTER TABLE MyChange DROP CONSTRAINT DF__MyChange__Name__05D8E0BE ;
2、修改类型
alter table MyChange alter column Name nvarchar(100)
3、创建默认值约束
ALTER TABLE [dbo].[MyChange] ADD CONSTRAINT [DF__MyChange__Name__05D8E0BE] DEFAULT ('') FOR [Name] ;