使用存储过程(动态执行sql字符串)实现
DECLARE @constraintName NVARCHAR(128);
-- 定义动态sql
DECLARE @sql NVARCHAR(MAX);
-- 默认值规则名称(设置了默认值字段都会有一个名称)
select @constraintName=c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id('你的表名称') and b.name='你的字段名称';
IF @constraintName=''
BEGIN
-- 没有默认值规则,直接设置,default后面是默认值,我这里是int类型
alter table 你的表名称 add default (0) for 你的字段名称 with values;
END
ELSE
BEGIN
-- 有默认值规则,先删除,再设置
-- 定义动态sql字符串为删除默认值规则名称
SET @sql = N'ALTER TABLE 你的表名称 DROP CONSTRAINT ' + QUOTENAME(@constraintName)
-- 动态执行sql字符串
EXEC sp_executesql @sql;
-- default后面是默认值
alter table 表名 add default (0) for 字段名 with values;
END