Sql Server修改列类型错误信息:对象名依赖于列
报错信息
修改表中列类型,发生报错如下:
bash
[SQL Server]对象'DF__Forecast___isCal__4E746892' 依赖于 列'isCalcFinished'。 (5074) [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN isCalc
解决方法
Sql Server修改列类型错误信息:对象名依赖于列
原因:存在默认约束
解决:
--1.查找出表中该字段的(默认)约束名称
declare @name varchar(50)
select @name =b.name from sysobjects b join syscolumns a on b.id = a.cdefault
where a.id = object_id('表名')
and a.name ='字段名'
--2. 删除存在的(默认)约束
exec('alter table 表名 drop constraint ' + @name)
--修改字段类型
ALTER TABLE 表名 ALTER COLUMN 字段名 INT
--添加默认约束
alter table 表名
add constraint DF_表名_字段名 default(0) for 字段名
测试sql语句
修改表中列类型为int
sql
--1.查找出表中该字段的(默认)约束名称
declare @name varchar(50)
select @name =b.name from sysobjects b join syscolumns a on b.id = a.cdefault
where a.id = object_id('Forecast_ProgramInfo_Plus_Rollcc')
and a.name ='isCalcFinished'
--2. 删除存在的(默认)约束
exec('alter table Forecast_ProgramInfo_Plus_Rollcc drop constraint ' + @name)
--修改字段类型
ALTER TABLE Forecast_ProgramInfo_Plus_Rollcc ALTER COLUMN isCalcFinished INT
--添加默认约束
alter table Forecast_ProgramInfo_Plus_Rollcc
add constraint DF_Forecast_ProgramInfo_Plus_Rollcc_isCalcFinished default(0) for isCalcFinished