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

ベストアンサー1

これは現在提案されている解決策よりもはるかに簡単です。

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

別のタイプの制約を削除する必要がある場合は、2 番目のパラメータ位置で OBJECT_ID() 関数に渡す適切なコードは次のとおりです。

C = CHECK constraint
D = DEFAULT (constraint or stand-alone)
F = FOREIGN KEY constraint
PK = PRIMARY KEY constraint
UQ = UNIQUE constraint

2 番目のパラメータなしで 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

おすすめ記事