2

リンク サーバーの URL を更新しています。変更を行う前に、このリンク サーバーを参照しているすべてのビューを知りたいです。このタスクを実行するプログラムによる方法 (TSQL) はありますか?

ご協力いただきありがとうございます。

SQL Server 2005、2008、および 2012 を使用しています。リンク サーバーを参照するデータベース サーバーは、ほとんどが SQL Server 2005 です。

4

4 に答える 4

5

誤検知が返される可能性があり、動的 SQL を使用して 4 部構成の名前が作成された場合はキャプチャされませんが、これはおそらく最も簡単な方法です。

SELECT name FROM sys.views
WHERE LOWER(OBJECT_DEFINITION([object_id])) LIKE LOWER('%LinkedServerName%');
于 2012-08-02T02:37:53.960 に答える
3

これにより、次のビューが見つかります。

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 に変更しました。ありがとうアーロン・バートランド

于 2012-08-02T14:39:53.867 に答える
2

データベース オブジェクト (テーブル、列、トリガーなど) を名前で検索する必要がある場合は、これを行うSQL 検索と呼ばれる無料のRed-Gate ツールを参照してください。データベース全体であらゆる種類の文字列を検索します。

ここに画像の説明を入力

ここに画像の説明を入力

これは、DBA やデータベース開発者にとって欠かすことのできない優れたツールです。

于 2012-08-02T04:52:02.660 に答える
-1

これを試して:

SELECT name, OBJECT_DEFINITION([object_id]) FROM sys.views
where OBJECT_DEFINITION([object_id]) like '%.%.dbo.%'
于 2012-08-02T05:36:59.873 に答える