8

SQL 2005 で特定のテーブルに属するすべての既定の制約を削除するにはどうすればよいですか?

4

4 に答える 4

7

検索からの1つの解決策:(デフォルトの制約用に編集)

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
于 2009-04-20T07:37:03.927 に答える
4

これは古いことは知っていますが、グーグルで見つけたばかりです。カーソルに頼らずにSQL 2008(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
于 2013-03-20T00:34:35.647 に答える