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

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

推荐答案

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

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]

Sql相关问答推荐

如何返回字符串中包含相同值的数据?

在SQL:2003(PGQ)中,Cypher查询语言、GQL、PGQL和属性图查询的常见子集是什么?'

将SEMI JOIN、ANTI JOIN转换为非连接SQL

Select /过滤postgr中的树 struct

SQL是否可以计算每年的所有日期变化?

从自定义日期和时间开始,每月具有给定状态的公司数量

仅当交叉应用返回单值时才更新记录

Oracle中的时间戳

Select 一个非零值减少重复

创建具有多个子查询的 SQL 视图

SQL Server:时态表并在运行时添加计算列

如何创建一个递归计数器来查找一个元素有多少父级和子级?

为什么在事务中未被后续使用的CTE执行SELECT...FOR UPDATE无效?

使用in和and运算符过滤记录的条件

在 postgresql 中保存带有时间戳的几何类型数据

SQL Server 查找存在于所有不同时期(或序列)中的条目

使用SQL中另一个表的查询结果在表中查找记录

SQL Server 分区和 Run Case 语句

Postgres 条件求和函数

SQL 查询以填充单个列中的所有值