41235


SQLServerを幾つか有している状況で、そのうちの一つが機器老朽化から後継機への移行を予定中です。  
互いのSQLServerはデータ連携を目的に相互のデータ参照・登録・更新を達成してきており、ストアド・ビュー・ジョブといった各オブジェクトの中で、移行対象のSQLServerが定義されてしまっている部分を洗い出したいと考えています。（主にリンクサーバとしての参照が濃厚）

ビューやジョブのデザインを一覧でダウンロードするようなユーティリティはありませんでしょうか？  
机上で目をとおし 影響の出ているオブジェクトだけ対策を投じたいと思っています。


CC BY-SA 3.0
2018-01-26T16:43:40.593
41231
2018-01-27T02:24:32.083
2018-01-26T23:17:57.220
25696
25696
question
sql-server
SQLServer の一つを後継機に移行する上で、影響オブジェクトを調べたい


SQL Serverには[システムカタログビュー](https://docs.microsoft.com/ja-jp/sql/relational-
databases/system-catalog-views/catalog-views-transact-
sql)と呼ばれるオブジェクト情報を取得するためのビューが多数定義されています。たとえばSQLで定義されたビューやストアドプロシージャのソースは`sys.sql_modules`から

[code]

    SELECT object_id, definition FROM sys.sql_modules
    
[/code]

のように参照できます。基本的にはここからソースコードを取得し、対象サーバー名を検索すれば可能です。

またリンクサーバー使用時にはシノニムを定義することも多いかと思いますが、`[server_name]`内のオブジェクトに対するシノニムは

[code]

    SELECT object_id, name FROM sys.synonyms WHERE base_object_name LIKE '[[]server_name].%'
    
[/code]

のように抽出でき、これらの`object_id`を`sys.sql_dependencies`の`referenced_major_id`から検索するとシノニムを使用しているSQLモジュールのオブジェクトIDが分かります。

[code]

    SELECT * FROM sys.objects
     WHERE object_id IN(
        SELECT d.object_id
          FROM sys.synonyms s
         INNER JOIN sys.sql_dependencies d
            ON s.object_id = d.referenced_major_id
         WHERE s.base_object_name LIKE '[[]server_name].%')
    
[/code]

## 追記

文字列検索より直接的なカタログビューがありました。`sys.sql_expression_dependencies`には`referenced_server_name`がありますので、ここを見れば直接参照しているSQLモジュールが分かります。

[code]

    SELECT *
      FROM sys.objects
     WHERE object_id IN (
        SELECT referencing_id
          FROM sys.sql_expression_dependencies
         WHERE referenced_server_name = 'server_name')
    
[/code]


CC BY-SA 3.0
2018-01-27T00:16:20.453
41235
2018-01-27T02:24:32.083
2018-01-27T02:24:32.083
5750
5750
41231
answer


> ビューやジョブのデザインを一覧でダウンロードするようなユーティリティはありませんでしょうか？

どういった出力を求められているかわかりませんでした。pgrhoさんが回答されているように目的のオブジェクトを検索するのも一つの手だと思います。私からは別アプローチで。

Management Studioには[スクリプトの生成](https://docs.microsoft.com/ja-jp/sql/relational-
databases/scripting/generate-scripts-sql-server-management-
studio)という機能があります。これはデータベース上のすべてのオブジェクトに対して再構築可能なスクリプトを生成する機能です。つまりテーブルであれば対応する`CREATE
TABLE`文が得られます。  
データベース全体に対するスクリプトを取得できたら、あとは当該スクリプトをエディタなどで検索してじっくりと分析できるかと思います。


CC BY-SA 3.0
2018-01-27T00:33:12.770
41236
2018-01-27T00:33:12.770
4236
41231
answer