Sql Server修改列類型錯誤信息:對象名依賴于列
- 報錯信息
- 解決方法
- 測試sql語句
報錯信息
修改表中列類型,發生報錯如下:
[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
--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