【SQL Server】SSMSで使える便利クエリ|DB調査・トラブル対応に役立つSQL集

【SQL Server】SSMSで使える便利クエリ|DB調査・トラブル対応に役立つSQL集 SQL

今回は、実務で役立つちょっとした便利なクエリ”をまとめました。
定番クエリから、実務での調査やトラブル対応に使えるものまで、目的別にまとめています。

指定テーブルのインデックス一覧を確認したい

SELECT 
    t.name AS TableName,
    i.name AS IndexName,
    i.type_desc,
    c.name AS ColumnName
FROM 
    sys.indexes i
    INNER JOIN sys.index_columns ic 
    ON i.object_id = ic.object_id 
    AND i.index_id = ic.index_id
    INNER JOIN sys.columns c 
    ON ic.object_id = c.object_id 
    AND ic.column_id = c.column_id
    INNER JOIN sys.tables t 
    ON i.object_id = t.object_id
WHERE 
    t.name = 'your_table_name';
  • どの列にどのようなインデックスが設定されているか確認できます
  • パフォーマンス改善やチューニング時の調査に便利です

カラムの型やNULL許可を確認したい

SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    CHARACTER_MAXIMUM_LENGTH, 
    IS_NULLABLE
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_NAME = 'your_table_name';
  • テーブルのカラム情報を一覧で確認できます
  • GUIで開くより早く確認でき、さらにスクリプトで一覧化もできます
  • データ移行や仕様確認のときに役立ちます

主キー制約がある列を調べたい

SELECT 
    KU.TABLE_NAME,
    KU.COLUMN_NAME,
    KU.CONSTRAINT_NAME
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
JOIN 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
    ON TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME
WHERE 
    TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
    AND KU.TABLE_NAME = 'your_table_name';
  • 主キーが設定されている列を確認できます
  • 単一キーでも複合キーでも対応
  • 設計変更前の確認やER図なしのDB構造把握に便利です

ユーザー定義関数(UDF)の一覧を確認したい

SELECT * 
FROM sys.objects 
WHERE type IN ('FN', 'IF', 'TF');

FN:スカラー関数(値を返す)
IF:インライン テーブル値関数
TF:マルチステートメント テーブル関数

最近実行されたクエリの履歴を確認したい

SELECT 
    TOP 20
    qs.creation_time,
    qs.last_execution_time,
    qt.TEXT
FROM 
    sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY 
    qs.last_execution_time DESC;
  • 最近実行されたSQLを確認できます
  • 管理者権限が必要な場合があるので注意

トリガーの一覧を取得したい

SELECT 
    name, 
    parent_id,
    OBJECT_NAME(parent_id) AS TableName,
    type_desc 
FROM 
    sys.triggers;
  • データベース内のトリガーを一覧表示します
  • 複雑なテーブルの動作把握に役立ちます

データベースのサイズを確認したい

EXEC sp_spaceused;
  • 現在のデータベース全体の使用容量がわかります
  • 表示内容:データサイズ、ログサイズ、空き領域など

バックアップの最新実行日時を確認したい

SELECT 
    database_name,
    MAX(backup_finish_date) AS last_backup
FROM 
    msdb.dbo.backupset
WHERE 
    type = 'D'  -- 完全バックアップ
GROUP BY 
    database_name;
  • 各データベースの最後のバックアップ日時を確認できます
  • 本番環境では定期的な確認に使えます

現在接続中のセッション一覧を確認したい

SELECT 
    session_id, 
    login_name, 
    host_name, 
    program_name, 
    login_time
FROM 
    sys.dm_exec_sessions
WHERE 
    is_user_process = 1;
  • 現在接続しているユーザーセッションを確認できます
  • 接続数の監視やトラブル発生時の調査に使えます

SQL Serverで現在のデータベースに存在するテーブル一覧を取得するクエリ

-- データベース内に存在するテーブル一覧を取得
SELECT 
    TABLE_SCHEMA,      -- スキーマ名(例:dbo)
    TABLE_NAME,        -- テーブル名
    TABLE_TYPE         -- テーブル種別('BASE TABLE' または 'VIEW')
FROM 
    INFORMATION_SCHEMA.TABLES
ORDER BY 
    TABLE_SCHEMA, 
    TABLE_NAME;

接続中のデータベース内に存在するテーブルの一覧を取得するSQLです。
テーブルのスキーマ名、テーブル名、テーブルの種類(基本テーブルまたはビュー)を確認できます。

  • INFORMATION_SCHEMA.TABLES はSQL Serverが標準で提供するビューで、データベースのメタ情報にアクセスできます。
  • TABLE_TYPE が ‘BASE TABLE’ の場合は物理テーブル、’VIEW’ の場合はビューを意味します。
  • 特定のスキーマのみに絞りたい場合は、WHERE TABLE_SCHEMA = ‘dbo’ などの条件を追加できます。

特定のカラム名を持つテーブルを検索するクエリ

-- 指定したカラム名を含むテーブルを検索する(ここでは 'updated_at')
SELECT 
    t.name AS TableName,
    c.name AS ColumnName
FROM 
    sys.tables t
INNER JOIN 
    sys.columns c ON t.object_id = c.object_id
WHERE 
    c.name = 'updated_at'
ORDER BY 
    t.name;

このクエリは、現在のデータベース内で updated_at というカラム名を持つテーブルを一覧表示します。
カラム名は自由に変更できるため、任意のカラムがどのテーブルに含まれているかを調査したいときに便利です。
スキーマをまたいで広く確認できるため、既存のデータ構造を把握したい場面で役立ちます。

最近更新されたレコードを確認するクエリ(例:ordersテーブル)

-- 更新日時が新しい順にレコードを確認する(ordersテーブルの例)
SELECT TOP 10 *
FROM dbo.orders
ORDER BY updated_at DESC;

このクエリは、orders テーブルの中から updated_at の値が新しい順に最大10件のレコードを取得します。
最近更新されたデータの内容や状態を素早く確認したいときに使います。
特に、運用中のシステムでの不具合調査や、直近の更新履歴を追いたいときに役立ちます。
※テーブルに updated_at カラムが存在することが前提です。

現在接続しているデータベース名を確認するクエリ

-- 現在接続しているデータベース名を確認する
SELECT DB_NAME() AS CurrentDatabase;

このクエリを実行すると、現在接続中のデータベース名が CurrentDatabase という列名で表示されます。
複数のデータベースを扱う環境では、意図したデータベースに接続しているかを確認するのに有用です。
SSMSのタブを複数開いて作業しているときなど、事故を防ぐために活用できます。

コメント

タイトルとURLをコピーしました