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

SQLServerインスタンス上のすべてのデータベースから主キー制約のリストを取得する方法-SQLServer/TSQLチュートリアルパート60

    シナリオ:

    データベースオブジェクトのドキュメント化に取り組んでおり、SQLServerインスタンス全体のすべてのデータベーステーブルに対するすべての主キー制約のリストを提供するように求められます。データベース名、スキーマ名、テーブル名、列名、制約名を含むすべての主キー制約のリストをどのように提供しますか?

    解決策:

    システムビューを使用して、主キー制約情報を取得します。すべてのデータベースでクエリを実行する必要があるため、動的SQLでカーソルを使用します。データベースごとに、結果を一時テーブルに挿入し、最後に一時テーブルから結果を選択して表示します。

    USE master
    GO
    --Declare Variables
    DECLARE @DatabaseName AS VARCHAR(500)
    --Create Temp Table to Save Results
    IF OBJECT_ID('tempdb..#Results') IS NOT NULL
        DROP TABLE #Results
    CREATE TABLE #Results (
        ServerName VARCHAR(128)
        ,DatabaseName VARCHAR(128)
        ,SchemaName VARCHAR(128)
        ,TableName VARCHAR(128)
        ,ColumnName VARCHAR(128)
        ,ConstraintName VARCHAR(128)
        )
    DECLARE CUR CURSOR
    FOR
    SELECT '[' + NAME + ']' AS DBName
    FROM sys.databases
    WHERE NAME NOT IN (
            'master'
            ,'tempdb'
            ,'model'
            ,'msdb'
            )
    OPEN Cur
    FETCH NEXT
    FROM Cur
    INTO @DatabaseName
    WHILE @@FETCH_STATUS = 0
    BEGIN
        --Build dynamic sql for each database 
        DECLARE @SQL VARCHAR(MAX) = NULL
        SET @SQL = 'Insert into #Results
          Select
          @@ServerName,
       TC.Table_Catalog as DatabaseName,
       TC.Table_Schema AS TableSchema,
       TC.Table_Name AS TableName,
       CCU.Column_Name AS ColumnName,
       TC.Constraint_Name AS ConstraintName 
    From' + @DatabaseName + '.information_Schema.Table_Constraints TC  
    INNER JOIN
       ' + @DatabaseName + 
    '.Information_Schema.constraint_column_usage CCU  
          on TC.Constraint_Name=CCU.Constraint_Name  
          and TC.Table_Name=CCU.Table_Name  
    where
       Constraint_Type=''PRIMARY KEY'''
        EXEC (@SQL)
        PRINT @SQL
        FETCH NEXT
        FROM Cur
        INTO @DatabaseName
    END
    CLOSE Cur
    DEALLOCATE Cur
    --Select all records from temp table for Primary Key 
    --Constraint Information
    SELECT *
    FROM #Results



    SQL Serverインスタンスで上記のクエリを実行すると、以下に示すように、データベース名、スキーマ名、テーブル名、列名、および制約名を含むすべての主キー制約のリストが取得されます。
    SQLServerインスタンスから各データベースのすべての主キー制約のリストを取得する方法-SQLServer /T-SQLチュートリアル
    1. PostgreSQL DATEADD()と同等

    2. MySQLの新しいテーブルにデータをコピーします

    3. Oracleの関数とプロシージャ

    4. Postgres9.1とMysql5.6InnoDB?