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

データベース内の一意の制約とインデックスの一覧を取得する

    一意の制約はインデックスとして内部で実装されているため、この情報はすべて sys.indexes から直接取得できます:

    SELECT
      [schema] = OBJECT_SCHEMA_NAME([object_id]),
      [table]  = OBJECT_NAME([object_id]),
      [index]  = name, 
      is_unique_constraint,
      is_unique,
      is_primary_key
    FROM sys.indexes
    -- WHERE [object_id] = OBJECT_ID('dbo.tablename');
      

    すべてのデータベースに対して繰り返すには (おそらく特定のテーブルのフィルターなしで):

    DECLARE @sql NVARCHAR(MAX) = N'';
    
    SELECT @sql += 'SELECT db = ' + name + ',
        [schema] = OBJECT_SCHEMA_NAME([object_id]),
        [table]  = OBJECT_NAME([object_id]),
        [index]  = name, 
        is_unique_constraint,
        is_unique,
        is_primary_key
      FROM ' + QUOTENAME(name) + '.sys.indexes;'
    FROM sys.databases
    WHERE database_id BETWEEN 4 AND 32766;
    
    EXEC sp_executesql @sql;
      

    1. ショアテルレポートのクエリでの複数のSELECTCASEステートメント

    2. plsqlで即時実行

    3. MySqlCommandパラメータを使用するときにコマンド文字列を確認するにはどうすればよいですか?

    4. mysqlを使用したC#で問題が発生した場合、トランザクションはロールバックされませんか?