SQL Serverでは、Transact-SQLを使用して、すべての外部キーとCHECK
のリストを返すことができます。 現在のデータベースの制約。
このページの例では、この情報を取得するために2つのシステムビューを照会します:
sys.foreign_keys
および
sys.check_constraints
。それぞれを個別にクエリするか、UNION
を使用できます それらすべてを単一の結果セットに表示します。
例1-結合された結果セット
この例では、UNION
を使用しています 外部キーを返し、CHECK
同じ結果セットの制約。
SELECT OBJECT_NAME(parent_object_id)AS'Table'、name AS'Constraint'、type_desc、is_disabled、is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id)、name、type_desc、is_disabled、is_not_trustedFROM sys.check_constraints;結果:
+ ------------------ + --------------------------- ----- + ------------------------ + --------------- + --- --------------- + |テーブル|制約| type_desc | is_disabled | is_not_trusted || ------------------ + ---------------------------- ---- + ------------------------ + --------------- + ---- -------------- || BandMember | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || BandMember | FK_BandMember_Musician | FOREIGN_KEY_CONSTRAINT | 0 | 0 ||市| FK_City_Country | FOREIGN_KEY_CONSTRAINT | 0 | 0 || MembershipPeriod | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || MembershipPeriod | FK_MembershipPeriod_BandMember | FOREIGN_KEY_CONSTRAINT | 0 | 0 | + ------------------ + ---------------------------- ---- + ------------------------ + --------------- + ---- -------------- +この場合、現在のデータベースには4つの外部キーと1つの
CHECK
が含まれています 制約。また、各制約が有効か無効か、信頼できるかどうかも確認できます。
例2–すべての列を返す
これらの2つのビューは、この例でリストしたよりも多くの列を返します。いつでもワイルドカードを使用してすべての列を返すことができます。ただし、これを行うと、
UNION
を使用できなくなります 、各ビューが異なる数の列を返すためです。したがって、それらを個別に照会する必要があります。例:
SELECT * FROM sys.foreign_keys; SELECT * FROM sys.check_constraints;これにより、2つの結果セットが生成されます。1つは外部キーを含み、もう1つは
CHECK
を含みます。 制約。スペースを節約するために、そのクエリの結果は表示しません。ただし、2行目で生成されるものは次のとおりです(垂直出力を使用して、水平方向にスクロールする必要がなくなります):
SELECT * FROM sys.check_constraints;結果(垂直出力を使用):
-[RECORD1]-------------------------名前| chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1parent_object_id | 1349579846タイプ| C type_desc | CHECK_CONSTRAINTcreate_date | 2019-09-11 00:33:02.587modify_date | 2019-09-11 00:33:02.587is_ms_shipped | 0is_published | 0is_schema_published | 0is_disabled | 0is_not_for_replication | 0is_not_trusted | 0parent_column_id | 0定義| ([EndDate]> =[StartDate])uses_database_collation | 1is_system_named | 0これらの列のいずれかをクエリに含めることができますが、外部キーと組み合わせる場合は、両方のビューに同じ列を含めるようにしてください。
sys.foreign_keys
viewはさらにいくつかの列を返します。これが変更されたクエリで、そのビューから最初の行を(名前で)返します。SELECT TOP(1)* FROM sys.foreign_keysORDER BY name;結果(垂直出力を使用):
-[RECORD1]-------------------------名前| FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1parent_object_id | 1285579618タイプ| F type_desc | FOREIGN_KEY_CONSTRAINTcreate_date | 2019-08-17 15:58:42.027modify_date | 2019-08-17 15:58:42.027is_ms_shipped | 0is_published | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1is_disabled | 0is_not_for_replication | 0is_not_trusted | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referential_action_desc | NO_ACTIONis_system_named | 0