none
SSMSでリネームした後、Microsoft.SqlServer.Management.Smo を介して取得するとリネームされていない RRS feed

  • 質問

  • こんばんは necoscard です

    SQLServer2008を毎日使っています。

    たまたまストアドプロシージャの名前を変えてコミット後に Microsoft.SqlServer.Management.Smo 系のSDKを使って、内容を取得したらリネーム前のままでした(StoredProcedure::TextHeaderプロパティの内容)。

    ※オブジェクトエクスプローラーのツリー上でのリネームです。

    詳しい内容はこちらです

    http://necos-plan.blogspot.jp/2012/05/sqlservermanagementsmo.html

    ソース管理でSMOを使っているのでかなり深刻な問題です。

    これは仕様なのでしょうか?

    よろしくお願いします。


    • 編集済み necoscard 2012年5月17日 15:24 補足追加
    2012年5月17日 15:20

回答

  • 私の場合、TextHeaderやTextBodyではなくScriptメソッドを使っていました。こちらだとSSMSと同等にスクリプト内容を細かく指定できます。
    • 回答の候補に設定 佐祐理 2012年5月19日 2:44
    • 回答としてマーク 山本春海 2012年5月21日 0:34
    2012年5月17日 21:20
  • SQL Server では、「コメントを含めたオブジェクト作成時に使用されたSQL」をテキストで保持しています。 オブジェクト エクスプローラの「名前の変更」は、データベース上のオブジェクトの名称を変更するだけで、データベース上にデータとして格納されているテキストは変更しません。

    ちなみに、暗号化が有効になって等の理由でテキストの格納が行われない場合もあります。この場合は空文字列が入っているはずですよ。

    • 回答としてマーク 山本春海 2012年5月21日 0:34
    2012年5月18日 1:14
  • SSMS の名前変更には sp_rename というストアドプロシージャが利用されておりますので、sp_rename のヘルプ に書かれている内容が参考になるかと。
    # K. Takaoka さんが書かれている内容についての情報が記載されております。
    推奨される方法としては necoscard さんがブログで書かれているように ALTER や DROP / CREATE を使用したテキスト自身の変更になるかと思います。

    ご参考になれば幸いです。

    • 回答としてマーク 山本春海 2012年5月21日 0:34
    2012年5月18日 7:38
    モデレータ
  • 私の場合、TextHeaderやTextBodyではなくScriptメソッドを使っていました。こちらだとSSMSと同等にスクリプト内容を細かく指定できます。

    なるほど~。

    解決です ^ ^

    テーブルスキーマの方は最初からTable::Script()を使って取得してたのでそっちの手法を最初から使ってたら良かったんですね!

    ありがとうございます

    • 回答としてマーク necoscard 2012年5月19日 2:04
    2012年5月19日 2:04

すべての返信

  • 私の場合、TextHeaderやTextBodyではなくScriptメソッドを使っていました。こちらだとSSMSと同等にスクリプト内容を細かく指定できます。
    • 回答の候補に設定 佐祐理 2012年5月19日 2:44
    • 回答としてマーク 山本春海 2012年5月21日 0:34
    2012年5月17日 21:20
  • SQL Server では、「コメントを含めたオブジェクト作成時に使用されたSQL」をテキストで保持しています。 オブジェクト エクスプローラの「名前の変更」は、データベース上のオブジェクトの名称を変更するだけで、データベース上にデータとして格納されているテキストは変更しません。

    ちなみに、暗号化が有効になって等の理由でテキストの格納が行われない場合もあります。この場合は空文字列が入っているはずですよ。

    • 回答としてマーク 山本春海 2012年5月21日 0:34
    2012年5月18日 1:14
  • SSMS の名前変更には sp_rename というストアドプロシージャが利用されておりますので、sp_rename のヘルプ に書かれている内容が参考になるかと。
    # K. Takaoka さんが書かれている内容についての情報が記載されております。
    推奨される方法としては necoscard さんがブログで書かれているように ALTER や DROP / CREATE を使用したテキスト自身の変更になるかと思います。

    ご参考になれば幸いです。

    • 回答としてマーク 山本春海 2012年5月21日 0:34
    2012年5月18日 7:38
    モデレータ
  • 私の場合、TextHeaderやTextBodyではなくScriptメソッドを使っていました。こちらだとSSMSと同等にスクリプト内容を細かく指定できます。

    なるほど~。

    解決です ^ ^

    テーブルスキーマの方は最初からTable::Script()を使って取得してたのでそっちの手法を最初から使ってたら良かったんですね!

    ありがとうございます

    • 回答としてマーク necoscard 2012年5月19日 2:04
    2012年5月19日 2:04
  • StredProcedure::Script()メソッドで解決できることを確認いたしました。

    皆様のご意見とても参考になりました。

    (TextHeaderやTextBodyがどういう場合に使えばいいのかという疑問は残りますが…)

    今回の件は解決です

    2012年5月19日 2:07