1. ホーム
  2. sql-server

[解決済み] Sqlサーバーに制約が存在するかどうかを確認する方法は?

2022-02-19 14:12:59

質問

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

ALTER TABLE dbo.ChannelPlayerSkins
    DROP CONSTRAINT FK_ChannelPlayerSkins_Channels

が、どうやら、私たちが使っている他のいくつかのデータベースでは、この制約は違う名前を持っているようです。という名前の制約があるかどうかを確認するにはどうしたらよいでしょうか? FK_ChannelPlayerSkins_Channels .

解決方法は?

これを試してみてください。

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

-- EDIT --

最初にこの質問に答えたとき、私は"外部キー"と考えていました。 その後、多くの人が他のquot;制約を見つけることについてコメントしています。

--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」データベースを展開し、「Programmability」、「Stored Procedures」、「System Stored Procedures」の順に展開します。 次に、"sys.sp_helpconstraint" を見つけて右クリックし、"modify" を選択します。 ただし、変更を保存しないように注意してください。 また、このシステム ストアド プロシージャを任意のテーブルで使用するには、次のように使用します。 EXEC sp_helpconstraint YourTableNameHere .