如何让 TRY CATCH 掉落

How make a TRY CATCH drop

我想得到这个对象的名字

删除具有该名称的约束

ALTER TABLE dbo.Establecimientos 
    DROP CONSTRAINT DF__Estableci__proce__498EEC8D

其中 DF__Estableci__proce__498EEC8D 是与我有冲突的对象的名称

我需要捕获该错误并自动为他替换我的代码。

您可以做的是在删除列之前检查是否存在默认约束。

此查询将 return 提供存在于要删除的列上的默认约束的名称。只需替换要删除的 table 名称和列名称即可。

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" 并为您的 table 和列执行它。请记住在删除列之前执行此操作。

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