SQL Server に制約が存在するかどうかを確認するにはどうすればよいでしょうか? 質問する

SQL Server に制約が存在するかどうかを確認するにはどうすればよいでしょうか? 質問する

次のようなSQLがあります:

ALTER TABLE dbo.ChannelPlayerSkins
    DROP CONSTRAINT FK_ChannelPlayerSkins_Channels

しかし、どうやら、私たちが使用している他のデータベースでは、制約の名前が異なっています。 という名前の制約があるかどうかを確認するにはどうすればよいですかFK_ChannelPlayerSkins_Channels

ベストアンサー1

これを試して:

SELECT
    * 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
    WHERE CONSTRAINT_NAME ='FK_ChannelPlayerSkins_Channels'

- 編集 -

最初にこの質問に答えたとき、元の質問では「FK_ChannelPlayerSkins_Channels」を見つけることについて尋ねられていたため、「外部キー」について考えていました。それ以来、多くの人が他の「制約」を見つけることについてコメントしており、そのための他のクエリをいくつか示します。

--Returns one row for each CHECK, UNIQUE, PRIMARY KEY, and/or FOREIGN KEY
SELECT * 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_NAME='XYZ'  


--Returns one row for each FOREIGN KEY constrain
SELECT * 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
    WHERE CONSTRAINT_NAME='XYZ'


--Returns one row for each CHECK constraint 
SELECT * 
    FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS
    WHERE CONSTRAINT_NAME='XYZ'

ここに別の方法があります

--Returns 1 row for each CHECK, UNIQUE, PRIMARY KEY, FOREIGN KEY, and/or DEFAULT
SELECT 
    OBJECT_NAME(OBJECT_ID) AS NameofConstraint
        ,SCHEMA_NAME(schema_id) AS SchemaName
        ,OBJECT_NAME(parent_object_id) AS TableName
        ,type_desc AS ConstraintType
    FROM sys.objects
    WHERE type_desc LIKE '%CONSTRAINT'
        AND OBJECT_NAME(OBJECT_ID)='XYZ'

制約に関する詳細情報が必要な場合は、システム ストアド プロシージャ内を調べて、master.sys.sp_helpconstraint特定の情報を取得する方法を確認してください。SQL Server Management Studio を使用してソース コードを表示するには、「オブジェクト エクスプローラー」に入ります。そこから、「Master」データベースを展開し、「プログラミング」、「ストアド プロシージャ」、「システム ストアド プロシージャ」の順に展開します。次に、「sys.sp_helpconstraint」を見つけて右クリックし、「変更」を選択します。変更を保存しないように注意してください。また、次のように使用することで、任意のテーブルでこのシステム ストアド プロシージャを使用することもできますEXEC sp_helpconstraint YourTableNameHere

おすすめ記事