如何在SQL Server中仅在外键约束存在时删除它?
如何在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
admin 更改状态以发布 2023年5月23日
在 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]
这比当前提出的解决方案简单得多:
IF (OBJECT_ID('dbo.FK_ConstraintName', 'F') IS NOT NULL) BEGIN ALTER TABLE dbo.TableName DROP CONSTRAINT FK_ConstraintName END
如果你需要放弃另一种类型的约束,这些是可以传递到 OBJECT_ID() 函数的第二个参数位置的适用代码:
C = CHECK constraint D = DEFAULT (constraint or stand-alone) F = FOREIGN KEY constraint PK = PRIMARY KEY constraint UQ = UNIQUE constraint
您也可以使用没有第二个参数的 OBJECT_ID。
类型的完整列表在此处:
对象类型:
AF = Aggregate function (CLR) C = CHECK constraint D = DEFAULT (constraint or stand-alone) F = FOREIGN KEY constraint FN = SQL scalar function FS = Assembly (CLR) scalar-function FT = Assembly (CLR) table-valued function IF = SQL inline table-valued function IT = Internal table P = SQL Stored Procedure PC = Assembly (CLR) stored-procedure PG = Plan guide PK = PRIMARY KEY constraint R = Rule (old-style, stand-alone) RF = Replication-filter-procedure S = System base table SN = Synonym SO = Sequence object
适用于:SQL Server 2012 到 SQL Server 2014。
SQ = Service queue TA = Assembly (CLR) DML trigger TF = SQL table-valued-function TR = SQL DML trigger TT = Table type U = Table (user-defined) UQ = UNIQUE constraint V = View X = Extended stored procedure