リンク サーバーの URL を更新しています。変更を行う前に、このリンク サーバーを参照しているすべてのビューを知りたいです。このタスクを実行するプログラムによる方法 (TSQL) はありますか?
ご協力いただきありがとうございます。
SQL Server 2005、2008、および 2012 を使用しています。リンク サーバーを参照するデータベース サーバーは、ほとんどが SQL Server 2005 です。
リンク サーバーの URL を更新しています。変更を行う前に、このリンク サーバーを参照しているすべてのビューを知りたいです。このタスクを実行するプログラムによる方法 (TSQL) はありますか?
ご協力いただきありがとうございます。
SQL Server 2005、2008、および 2012 を使用しています。リンク サーバーを参照するデータベース サーバーは、ほとんどが SQL Server 2005 です。
誤検知が返される可能性があり、動的 SQL を使用して 4 部構成の名前が作成された場合はキャプチャされませんが、これはおそらく最も簡単な方法です。
SELECT name FROM sys.views
WHERE LOWER(OBJECT_DEFINITION([object_id])) LIKE LOWER('%LinkedServerName%');
これにより、次のビューが見つかります。
SELECT t2.name, OBJECT_DEFINITION(t1.[object_id]) view_definition
FROM sys.views t1 join sys.servers t2 on
OBJECT_DEFINITION(t1.[object_id]) like '%['+ t2.name + '].%' ESCAPE '['
テーブル、ビュー、スキーマ、またはデータベースがリンク サーバーと同じ名前の場合、失敗する可能性があります。
一部のビューが最初のチェックを逃した場合は、この行を追加できます。この部分は、リンク サーバー名を囲む角括弧をチェックしていません。ただし、この部分には余分な不要なビューが含まれる可能性が高いことに注意してください
or OBJECT_DEFINITION(t1.[object_id]) like '% '+ t2.name + '.%'
編集: sys.sysservers を sys.servers に変更しました。ありがとうアーロン・バートランド
データベース オブジェクト (テーブル、列、トリガーなど) を名前で検索する必要がある場合は、これを行うSQL 検索と呼ばれる無料のRed-Gate ツールを参照してください。データベース全体であらゆる種類の文字列を検索します。
これは、DBA やデータベース開発者にとって欠かすことのできない優れたツールです。
これを試して:
SELECT name, OBJECT_DEFINITION([object_id]) FROM sys.views
where OBJECT_DEFINITION([object_id]) like '%.%.dbo.%'