SQL Server でカラムに設定された MS_Description を列挙する

SQL Server でカラムに設定された MS_Description を列挙する

SQL Server でオブジェクトに説明を追加するときに使う拡張プロパティといえば MS_Description ですね。

膨大なテーブル群を相手にしていると、ふとカラムに設定された MS_Description を列挙したくてたまらなくなるときがあります。

ということでそんなときに役立つ SQL のコードスニペットをご紹介します。

SQL Server でカラムに設定された MS_Description を列挙する SQL

SELECT
  i.TABLE_SCHEMA
, i.TABLE_NAME
, i.COLUMN_NAME
, p.value AS [DESCRIPTION]
FROM INFORMATION_SCHEMA.COLUMNS i
  INNER JOIN sys.extended_properties p
    ON p.major_id = OBJECT_ID(i.TABLE_SCHEMA + '.' + i.TABLE_NAME)
    AND p.minor_id  = i.ORDINAL_POSITION
    AND p.name = 'MS_Description'
WHERE OBJECTPROPERTY(OBJECT_ID(i.TABLE_SCHEMA + '.' + i.TABLE_NAME), 'IsMsShipped') = 0 -- システムオブジェクト以外
  AND CAST(p.value as nvarchar) LIKE '%hoge%' -- MS_Description の内容で抽出
ORDER BY
  i.TABLE_SCHEMA
, i.TABLE_NAME
, i.ORDINAL_POSITION

以上です。

簡単な説明

基本的には INFORMATION_SCHEMA.COLUMNSsys.extended_properties を結合しているだけです。

INFORMATION_SCHEMA.COLUMNS

INFORMATION_SCHEMA.COLUMNS 現在のデータベースの現在のユーザーがアクセスできるすべての列の情報を取得できます。

ちなみにこのテーブルは MySQL や PostgreSQL でも用意されているため、同じような感じで使用できます。

sys.extended_properties

こちらは SQL Server の拡張プロパティ (Extended Property) を列挙するためのビューです。

kenzauros