15

クエリの作成に問題があります。Products and Brands テーブルがあるとします。このコマンドを使用して外部キーを追加できます。

          ALTER TABLE Products
          ADD FOREIGN KEY (BrandID)
          REFERENCES Brands(ID)

ただし、外部キーが存在しない場合にのみ、このコマンドを実行する必要があります。私が必要とする同様のことは、名前を使用せずに存在する場合に外部キー制約を削除することです。

4

4 に答える 4

14

まず第一に、このようなトラブルを避けるために、常に FK と他のすべての制約に名前を付ける必要があります。

ただし、FK の名前がわからない場合は、複数のシステム ビューを使用して確認できます。

IF NOT EXISTS 
(
    SELECT * FROM sys.foreign_key_columns fk 
    INNER JOIN sys.columns pc ON pc.object_id = fk.parent_object_id AND pc.column_id = fk.parent_column_id 
    INNER JOIN sys.columns rc ON rc.object_id = fk.referenced_object_id AND rc.column_id = fk.referenced_column_id
    WHERE fk.parent_object_id = object_id('Products') AND pc.name = 'BrandID'
    AND fk.referenced_object_id = object_id('Brands') AND rc.NAME = 'ID'
)
ALTER TABLE Products 
ADD CONSTRAINT Your_New_FK_NAME FOREIGN KEY (BrandID)
REFERENCES Brands(ID)
于 2013-05-28T13:07:37.477 に答える
11

これも使えます。

IF(OBJECT_ID('FK_Products_Brands', 'F') IS NULL)
ALTER TABLE [dbo].[Products] WITH CHECK ADD CONSTRAINT [FK_Products_Brands] FOREIGN KEY([BrandID]) REFERENCES [dbo].[Brands] ([Id])
于 2013-09-26T09:25:51.067 に答える
7

制約の名前を知らず、内部結合を使用せずにこれを行うには、次のようにします。

IF NOT EXISTS(SELECT NULL FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE [TABLE_NAME] = 'Products' AND [COLUMN_NAME] = 'BrandID')
BEGIN
    ALTER TABLE Products
    ADD FOREIGN KEY (BrandID)
    REFERENCES Brands(ID)
END

必要に応じて、このテーブルから制約の名前を取得し、ドロップ/追加を実行できます。

于 2014-01-14T15:15:46.817 に答える