【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] ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器