如何让 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
我想得到这个对象的名字
删除具有该名称的约束
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