【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] ; 

 

posted @ 2023-03-04 14:07  我有我奥妙  阅读(524)  评论(0编辑  收藏  举报