sql >> データベース >  >> RDS >> Sqlserver

SQL Serverデータベース内のすべての外部キーとチェック制約を返す(T-SQLの例)

    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_collat​​ion | 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 

    1. SQuirreLSQLをMicrosoftExcelに接続する

    2. 小さなテーブルから重複する行を削除する

    3. Oracle NULLIF()関数

    4. MySQLで複数の列に一意の制約を指定するにはどうすればよいですか?