仅当外键约束存在于 sql server 中时,如何删除它?

新手上路,请多包涵

如果表存在,我可以使用以下代码删除表,但不知道如何对约束执行相同操作:

 IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go

我还使用以下代码添加了约束:

 ALTER TABLE [dbo].[TableName]
  WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name])
    REFERENCES [dbo].[TableName2] ([ID])
go

原文由 solrevdev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 899
2 个回答

Eric Isaacs 的 回答中提供了更简单的解决方案。但是,它会在任何表上找到约束。如果要针对特定表的外键约束,请使用以下命令:

 IF EXISTS (SELECT *
  FROM sys.foreign_keys
   WHERE object_id = OBJECT_ID(N'FK_TableName_TableName2')
   AND parent_object_id = OBJECT_ID(N'dbo.TableName')
)
  ALTER TABLE [dbo].[TableName] DROP CONSTRAINT [FK_TableName_TableName2]

原文由 James L 发布,翻译遵循 CC BY-SA 4.0 许可协议

这适用于 Azure Sql 服务器:

     IF (OBJECT_ID('dbo.FK_company_id', 'F') IS NOT NULL)
    BEGIN
    ALTER TABLE dbo.table_company DROP CONSTRAINT FK_company_id
    END

原文由 Shahid Sayyed 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进