Как сделать TRY CATCH drop - PullRequest
       22

Как сделать TRY CATCH drop

0 голосов
/ 15 февраля 2019

Я хочу получить имя этого объекта

enter image description here

, чтобы создать ограничение с таким именем

ALTER TABLE dbo.Establecimientos 
    DROP CONSTRAINT DF__Estableci__proce__498EEC8D

, гдеDF__Estableci__proce__498EEC8D - это имя объекта, с которым у меня конфликт.

Мне нужно отловить эту ошибку и автоматически заменить мой код для него.

1 Ответ

0 голосов
/ 15 февраля 2019

Что вы можете сделать, это проверить наличие ограничения по умолчанию перед удалением столбца.

Этот запрос вернет вам имя ограничения по умолчанию, которое существует для столбца, который вы хотите удалить.Просто замените имя таблицы и имя столбца на тот, который вы хотите отбросить.

select dc.name 
from sys.default_constraints dc
join sys.tables t on t.object_id=dc.parent_object_id
join sys.columns c on c.object_id=t.object_id and c.column_id=dc.parent_column_id
where t.name='YourTABLE'
and c.name='YourCOLUMN'

С помощью этого запроса вы создадите «DROP CONSTRAINT» и выполните его для своей таблицы и столбца.Не забудьте сделать это перед тем, как опустить столбец.

DECLARE @Query nvarchar(max)

select @Query='ALTER TABLE '+ schema_name(t.schema_id) + '.' + t.name + ' DROP CONSTRAINT ' + dc.name 
from sys.default_constraints dc
join sys.tables t on t.object_id=dc.parent_object_id
join sys.columns c on c.object_id=t.object_id and c.column_id=dc.parent_column_id
where t.name='YourTABLE'
and c.name='YourCOLUMN'

exec sp_execute @Query
...