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

SQLServerインスタンスのすべてのデータベースで主キー制約のないテーブルのリストを取得する方法-SQLServer/TSQLチュートリアルパート62

    シナリオ:

    あなたはSQLServer開発者またはSQLServerDBAとして働いています。主キー制約がないSQLServerインスタンス上のすべてのデータベースからすべてのテーブルのリストを取得する必要があります。どのようにそれをしますか?


    解決策:

    システムビューを使用して、プライマリキー制約を持たないSQLServerインスタンス上のすべてのデータベースからすべてのテーブルを取得します。
    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)
        )
    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,
       Table_CataLog as DatabaseName,
       Table_Schema as TableSchema,
       Table_Name as TableName      
    from
       '+@DatabaseName+'.information_schema.tables T     
    where
       Not Exists(
          Select
             1 
          from
             '+@DatabaseName+'.information_Schema.Table_Constraints C     
          where
             Constraint_Type=''PRIMARY KEY''     
             and C.Table_Name=T.Table_Name     
             and C.Table_Schema=T.Table_Schema
       )     
       and Table_Type=''BASE TABLE'''
        EXEC (@SQL)
        --PRINT @SQL
        FETCH NEXT
        FROM Cur
        INTO @DatabaseName
    END
    CLOSE Cur
    DEALLOCATE Cur
    --Select all records from temp table 
    SELECT *
    FROM #Results
     
     SQL Serverインスタンスで上記のクエリを実行し、主キー制約がないすべてのデータベースからテーブルのリストを取得しました。

    主キー制約のないSQLServerインスタンスからすべてのテーブルを取得します-SQLServer/ TSQLチュートリアル
    1. clock_timestamp()がPostgreSQLでどのように機能するか

    2. mysql結果セットをループする方法

    3. mysql_fetch_assoc():指定された引数はphpの有効なMySQL結果リソースではありません

    4. Ubuntu16.04でのMariaDB10.0から10.3.9へのアップグレード