sqlserver有时候需要修改一个字段的默认值,却发现修改(update)不了,也删除(delete)不了,排查发现,需要先删除原有的默认值约束,才行;步骤如下1、2、3。
若原来这个字段就没有默认值,则直接执行步骤3的sql;注意,需要显示声明默认值约束,否则系统会默认生成后缀为随机字符串的约束;不利于维护和无法做到见名知意。
1,删除原有字段上的默认值约束
use [yourDBName];--数据库名
declare @tableName nvarchar(100);--表名
declare @columnName nvarchar(100);--列名
declare @cnt nvarchar(100);
declare @sqlcmd nvarchar(1024);
set @tableName='yourTableName'
set @columnName='yourColumnName'
select @cnt= b.name from sysobjects b join syscolumns a on b.id = a.cdefault where a.id = object_id(@tableName) and a.name = @columnName
set @sqlcmd = 'ALTER TABLE '+ @tableName +' DROP constraint ' + @cnt;
exec sp_executesql @sqlcmd
2,删除该字段
ALTER TABLE [schema].[yourTableName] DROP column yourColumnName
3,重新添加字段
ALTER TABLE [dbo].[yourTableName] ADD yourColumnName int NOT NULL
CONSTRAINT DF_yourTableName_yourColumnName DEFAULT ((-1));
EXEC sp_addextendedproperty N'MS_Description', N'字段注释', N'SCHEMA', N'dbo',N'TABLE', N'yourTableName', N'COLUMN', N'yourColumnName ';
4,这篇文章总结的不错
https://www.cnblogs.com/wy123/p/9205079.html#4431990