Как я могу удалить все ограничения по умолчанию для таблицы - PullRequest
8 голосов
/ 20 апреля 2009

Как я могу отбросить все ограничения по умолчанию, относящиеся к определенной таблице в SQL 2005?

Ответы [ 3 ]

7 голосов
/ 20 апреля 2009

Одно решение из поиска : (отредактировано для ограничений по умолчанию)

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
3 голосов
/ 20 марта 2013

Я знаю, что это старый, но я нашел его, когда гуглил. Решение, которое работает для меня в 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
0 голосов
/ 20 апреля 2009

Только почему ты хочешь это сделать? Отбрасывание ограничений - довольно радикальное действие, затрагивающее всех пользователей, а не только ваш процесс. Может быть, ваша проблема может быть решена другим способом. Если вы не являетесь администратором базы данных системы, вам следует очень серьезно подумать, стоит ли вам это делать. (Конечно, в большинстве систем, DBA не позволил бы кому-либо еще разрешения делать такую ​​вещь.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...