S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

SQLServerでのテーブルとカラムのコメント

できるだけ、個別のコードを書きたくないので、テーブルとカラムのコメントを取得したかったりする。
普通に

【テーブル】
COMMENT ON TABLE dbo.hoge IS 'テーブルほげ';
【カラム】
COMMENT ON COLUMN dbo.hoge.fuga IS 'カラムふが';

ってなのがあるけど、SQLServerはちと違うらしい。
拡張プロパティ(extendedproperty)ってのに設定して、その拡張プロパティをSQLで取得する、という方法となる。

コメントを設定

【テーブル】
USE DatabaseName;
GO
EXEC sys.sp_addextendedproperty 
@name = N'Description', 
@value = N'テーブルほげ', 
@level0type = N'SCHEMA', @level0name = dbo, 
@level1type = N'TABLE',  @level1name = hoge;
GO
【カラム】
USE DatabaseName;
GO
EXEC sys.sp_addextendedproperty 
@name = N'Description', 
@value = N'カラムふが', 
@level0type = N'SCHEMA', @level0name = dbo, 
@level1type = N'TABLE',  @level1name = hoge,
@level1type = N'COLUMN',  @level1name = fuga;
GO

コメントを取得

【テーブル】
SELECT
     t.name
    ,ep.name
    ,ep.value
FROM
    sys.tables AS t
INNER JOIN
    sys.extended_properties AS ep
    ON  t.object_id = ep.major_id
    AND ep.minor_id = 0
;
【カラム】
SELECT
    t.name
    , c.name
    , ep.name
    , ep.value
FROM
    sys.tables AS t
INNER JOIN
    sys.columns AS c
    ON t.object_id = c.object_id
INNER JOIN
    sys.extended_properties ep
    ON c.object_id = ep.major_id
    AND c.column_id = ep.minor_id
;

プロパティで名前+値の組み合わせなので、sys.extended_properties.nameも表示させてみた。
ちなみに拡張プロパティの更新は「sp_updateextendedproperty」、削除は「sp_dropextendedproperty」となる。