一尘不染

删除未命名的约束

sql

我创建了一些没有显式名称的外键。

然后我发现SQL生成了疯狂的名称,例如FK__Machines__IdArt__760D22A7。猜猜它们将在不同的服务器上以不同的名称生成。

是否有任何不错的功能来删除未命名的FK约束,这些表和字段作为参数传递?


阅读 153

收藏
2021-03-10

共1个答案

一尘不染

没有内置的过程可以完成此操作,但是您可以使用information_schema视图中的信息来构建自己的过程。

基于表的示例

Create Proc dropFK(@TableName sysname)
as
Begin

Declare @FK sysname
Declare @SQL nvarchar(4000)
Declare crsFK cursor for

select tu.Constraint_Name from 
information_schema.constraint_table_usage TU
LEFT JOIN SYSOBJECTS SO 
ON TU.Constraint_NAME = SO.NAME
where xtype = 'F'
and Table_Name = @TableName
open crsFK
fetch next from crsFK into @FK
While (@@Fetch_Status = 0)
Begin
    Set @SQL = 'Alter table ' + @TableName + ' Drop Constraint ' + @FK
    Print 'Dropping ' + @FK
    exec sp_executesql  @SQL
    fetch next from crsFK into @FK
End
Close crsFK
Deallocate crsFK
End
2021-03-10