[seasar-dotnet:1429] Re: SQLSERVERのコメント

kubo [E-MAIL ADDRESS DELETED]
2009年 8月 6日 (木) 18:32:12 JST


久保です。

八鍬さん、情報ありがとうございます。
できました。
「dbflute-sqlserver-example」にて実際に試しています。
ぜひ参考にしてみて下さい。
「DBFlute.NET-0.8.9.3-SNAPSHOT」にて利用可能です。
http://dbflute.net.sandbox.seasar.org/download/dbflute/dbflute-0.8.9.3-SNAPSHOT.zip

【補足1】
JDBCからだとcastしないと実行できなかったので、
最終的には
select cast(objtype as nvarchar(500)) as OBJECT_TYPE
     , cast(objname as nvarchar(500)) as TABLE_NAME
     , cast(value as nvarchar(4000)) as COMMENTS
  from fn_listextendedproperty('MS_Description', 'schema', 'dbo',
'table', default, default, default)
 order by TABLE_NAME asc
;
このようなSQLがDBFlute内部で実行されます。
「dbflute-sqlserver-example」では「take-finally.sql」で
同じSQLを発行して「一件以上存在すること」を
チェックしています(ちゃんと拡張プロパティの設定ができたか)。

【補足2】
ReplaceSchemaから拡張プロパティの設定をする時、
以下のように「#df:begin#」と「df:end#」で囲っています。
無くても実行されますが、コメント内の改行が消えてしまうので、
このようにしています。もし、改行を残したい場合はこのように
指定して実行して下さい。
(comment on句だと改行を残すように処理しているのですけどね...)

-- #df:begin#
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'会員:会員登録時にInsertされる。
物理削除されることはない'
  , @level0type=N'schema', @level0name=N'dbo'
  , @level1type=N'table' , @level1name=N'MEMBER'
;
-- #df:end#

2009/8/6 Tatsuya Yakuwa <[E-MAIL ADDRESS DELETED]>:
> 八鍬です。
>
> 会員のテーブルに対するコメントですよね。
>>
>> SELECT objtype, objname, name, value
>>  FROM fn_listextendedproperty('MS_Description', 'schema', 'dbo',
>> 'table', 'MEMBER', 'column', default)
>
>  SELECT objtype, objname, name, value
>   FROM fn_listextendedproperty('MS_Description', 'schema', 'dbo',
>  'table', 'MEMBER', default, default)
> で、どうでしょうか?
> 6番目の引数をdefaultに変更しました。
> ここが、'column'だと、会員テーブルのカラムに対するコメントの一覧を
> 取得していることになるみたいです。
>
> ちなみに、拡張プロパティの内容は、
> SQLServerManagementStudioのGUIからも確認できます。
>
> 以上です。
>
> On Thu, 06 Aug 2009 15:45:45 +0900, kubo <[E-MAIL ADDRESS DELETED]> wrote:
>
>> 久保(jflute)です。
>>
>>> EXEC sys.sp_updateextendedproperty @name=N'MS_Description', @value=N'会員'
>>>  , @level0type=N'SCHEMA', @level0name=N'dbo'
>>>  , @level1type=N'TABLE' , @level1name=N'MEMBER'
>>> ;
>>
>> 「sp_addextendedproperty」にしたらエラーにはならないようになりました。
>> (再度実行しても特にエラーにはならず)
>> ですが、
>> SELECT objtype, objname, name, value
>>  FROM fn_listextendedproperty('MS_Description', 'schema', 'dbo',
>> 'table', 'MEMBER', 'column', default)
>> で、0件HITなのでうまく動いてないのかも...
>>
>> 2009/8/6 kubo <[E-MAIL ADDRESS DELETED]>:
>>>
>>> 久保です。
>>>
>>> 八鍬さん、情報ありがとうございます。
>>> Oracleでは既に「OracleだったらIF文」で
>>> データディクショナリを参照してコメントを
>>> 取得していますので、同じような感じでできたらいいかなと。
>>>
>>> 一応「MS_Description」という名前は習慣的なもので任意ですよね?
>>> ただネットで色々調べてみるとみんなこの名前を使ってるようなので、
>>> 固定にして処理してもいいのかなぁと。
>>>
>>> ちなみに、今「dbflute-sqlserver-example」(SQLServer 2005 Express)で
>>> EXEC sys.sp_updateextendedproperty @name=N'MS_Description', @value=N'会員'
>>>  , @level0type=N'SCHEMA', @level0name=N'dbo'
>>>  , @level1type=N'TABLE' , @level1name=N'MEMBER'
>>> ;
>>> ってな感じでReplaceSchemaから実行しようとしてるのですが、
>>>
>>> プロパティを更新または削除できません。
>>> 'dbo.MEMBER' のプロパティ 'MS_Description' が存在しません。
>>> (SQLState=S0002 ErrorCode=15217)
>>>
>>> となってしまいました...
>>> 何か分かることがあれば情報頂けると助かります。
>>>
>>> 2009/8/6 Tatsuya Yakuwa <[E-MAIL ADDRESS DELETED]>:
>>>>
>>>> 久保様、回答ありがとうございます。
>>>>
>>>>> 現状では不可能ですが、このやり方が汎用的な仕組みとして
>>>>> 利用出来るならばDBFluteでも対応したいとは考えます。
>>>>
>>>> 了解いたしました。
>>>>
>>>>
>>>>> 拡張プロパティってどういう感じの扱いになるものでしょうか?
>>>>> (プログラムからその値を取得するときにどのようなSQLを書けば...)
>>>>
>>>> ストアドを使用して、以下のような構文で取得できます。
>>>> (詳しくは、MSDNにありました。)
>>>> --
>>>> --カラムに拡張プロパティをMS_Descriptionというプロパティ名でセットした場合。
>>>> --
>>>> SELECT objtype, objname, name, value
>>>> FROM fn_listextendedproperty(NULL, 'schema', 'dbo', 'table', 'Com_Bank',
>>>> 'column', default)
>>>> --
>>>> 結果セット
>>>> objtype|objname|name|value
>>>> COLUMN|bank_cd|MS_Description|銀行コード
>>>> ...
>>>> となります。
>>>>
>>>> MSDN
>>>> http://msdn.microsoft.com/ja-jp/library/ms179853.aspx
>>>>
>>>>
>>>> 以上です。
>>>>
>>>>
>>>> On Thu, 06 Aug 2009 14:45:22 +0900, kubo <[E-MAIL ADDRESS DELETED]> wrote:
>>>>
>>>>> 久保です。
>>>>>
>>>>> 八鍬さん、こんにちは
>>>>>
>>>>>> Doc.bat実行後に作成されるschemaHTMLのComment欄に、
>>>>>> このような任意の拡張プロパティの値を反映させることは可能でしょうか?
>>>>>
>>>>> 現状では不可能ですが、このやり方が汎用的な仕組みとして
>>>>> 利用出来るならばDBFluteでも対応したいとは考えます。
>>>>> http://d.hatena.ne.jp/jflute/20081028/1225120253
>>>>> と組み合わせれば、SQLServerでも良い感じのSchemaHTMLが
>>>>> できるようになるんじゃないかと。
>>>>>
>>>>> で、申し訳ありませんが、
>>>>> 拡張プロパティってどういう感じの扱いになるものでしょうか?
>>>>> (プログラムからその値を取得するときにどのようなSQLを書けば...)
>>>>>
>>>>> 2009/8/6 Tatsuya Yakuwa <[E-MAIL ADDRESS DELETED]>:
>>>>>>
>>>>>> 八鍬(やくわ)と申します。
>>>>>>
>>>>>> Doc.bat実行後に作成されるschemaHTMLについて、おたずねします。
>>>>>>
>>>>>> SQLSERVERには、コメント構文がないので。
>>>>>> 拡張プロパティを使用して、DB上にテーブルの論理名及びカラムの論理名を定義しています。
>>>>>> こんな構文で生成されてます。
>>>>>> --
>>>>>> EXEC sys.sp_updateextendedproperty @name=N'MS_Description',
>>>>>> @value=N'金融機関マスタ' , @level0type=N'SCHEMA'[E-MAIL ADDRESS DELETED]=N'dbo',
>>>>>> @level1type=N'TABLE'[E-MAIL ADDRESS DELETED]=N'Com_Bank'
>>>>>> --
>>>>>> (某ERツールの仕様なんですが。。。)
>>>>>>
>>>>>>
>>>>>> Doc.bat実行後に作成されるschemaHTMLのComment欄に、
>>>>>> このような任意の拡張プロパティの値を反映させることは可能でしょうか?
>>>>>>
>>>>>> もしくは、別の方法でComment欄を生成することは可能でしょうか?
>>>>>>
>>>>>> 外部キーをadditionalForeignKeyMap.dfpropで定義しているので、
>>>>>> それを反映したドキュメント(ER)として、schemaHTMLを利用したいという意図です。
>>>>>>
>>>>>> 以上です。
>>>>>> よろしくお願いします。
>>>>>>
>>>>>> --
>>>>>> 八鍬 達也
>>>>>> _______________________________________________
>>>>>> seasar-dotnet mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>
>>>>> _______________________________________________
>>>>> seasar-dotnet mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>
>>>>> __________  ESET NOD32 Antivirus からの情報, ウイルス定義データベースのバージョン 4310
>>>>> (20090805)
>>>>> __________
>>>>>
>>>>> このメッセージは ESET NOD32 Antivirus によって検査済みです。
>>>>>
>>>>> http://canon-its.jp
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> *----**===**----**===**----**===**----**===**----*
>>>>  株式会社 エム・エス・アイ
>>>>  システム部 八鍬 達也
>>>> Add:山形市松栄1-5-7
>>>> Tel:023-647-3966 Fax:023-647-3967
>>>>  E-mail:[E-MAIL ADDRESS DELETED]
>>>>  ☆ ★ ☆    社員ブログ更新中!!!    ☆ ★ ☆
>>>> http://www.msi-net.co.jp/blog/index.html
>>>> *----**===**----**===**----**===**----**===**----*
>>>> _______________________________________________
>>>> seasar-dotnet mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>
>>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>> __________ Information from ESET NOD32 Antivirus, version of virus
>> signature database 4310 (20090805) __________
>>
>> The message was checked by ESET NOD32 Antivirus.
>>
>> http://www.eset.com
>>
>>
>>
>
>
>
> --
> *----**===**----**===**----**===**----**===**----*
>  株式会社 エム・エス・アイ
>  システム部 八鍬 達也
>  Add:山形市松栄1-5-7
>  Tel:023-647-3966 Fax:023-647-3967
>  E-mail:[E-MAIL ADDRESS DELETED]
>  ☆ ★ ☆    社員ブログ更新中!!!    ☆ ★ ☆
>  http://www.msi-net.co.jp/blog/index.html
> *----**===**----**===**----**===**----**===**----*
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内