如何删除表中的所有默认约束约束条件
一个解决方案from a search:(编辑为默认约束)
SET NOCOUNT ON
DECLARE @constraintname SYSNAME, @objectid int,
@sqlcmd VARCHAR(1024)
DECLARE CONSTRAINTSCURSOR CURSOR FOR
SELECT NAME, object_id
FROM SYS.OBJECTS
WHERE TYPE = 'D' AND @objectid = OBJECT_ID('Mytable')
OPEN CONSTRAINTSCURSOR
FETCH NEXT FROM CONSTRAINTSCURSOR
INTO @constraintname, @objectid
WHILE (@@FETCH_STATUS = 0)
BEGIN
SELECT @sqlcmd = 'ALTER TABLE ' + OBJECT_NAME(@objectid) + ' DROP CONSTRAINT ' + @constraintname
EXEC(@sqlcmd)
FETCH NEXT FROM CONSTRAINTSCURSOR
INTO @constraintname, @objectid
END
CLOSE CONSTRAINTSCURSOR
DEALLOCATE CONSTRAINTSCURSOR
将OBJECT_NAME更改为PARENT_OBJECT_NAME效果不错。 – 2009-04-22 08:24:30
好的查询。我会尽量纠正。游标的声明应该是:SELECT NAME,parent_object_id FROM SYS.OBJECTS WHERE TYPE ='D'AND parent_object_id = OBJECT_ID('Mytable') – 2013-04-10 08:50:28
只是你为什么要这么做?删除约束是一个非常激烈的行为,并影响所有用户,而不仅仅是您的过程。也许你的问题可以通过其他方式解决。如果你不是系统的dba,你应该认真考虑你是否应该这样做。 (当然在大多数系统中,dba不会允许任何其他人执行此类操作)。
我知道这是旧的,但我在Google上搜索时发现它。 对我来说,2008年的SQL(不知道2005年),而不是诉诸光标有效的解决方案是如下:
declare @sql nvarchar(max)
set @sql = ''
select @sql = @sql + 'alter table YourTable drop constraint ' + name + ';'
from sys.default_constraints
where parent_object_id = object_id('YourTable')
AND type = 'D'
exec sp_executesql @sql
我已经删除了我的答案,因为我不是100%肯定,我无法测试。 – Peter 2009-04-20 07:52:01
你自己的解决方案似乎没问题,不是吗? – Peter 2009-04-20 07:53:47