11

SQL Server 2000 を使用して、すべてのトリガー プロシージャでグローバルにパターンを検索する方法はありますか?

ストアド プロシージャが呼び出されている場所が隠れています。

初めての投稿ですのでお手柔らかに。

4

3 に答える 3

24

これにより、SQL Server 2000 のトリガー、プロシージャ、関数、およびビューが検索されます (新しいバージョンではこのアプローチを推奨しません。より良い方法については、このブログ投稿を参照してください)。

SELECT o.name
 FROM syscomments AS c
 INNER JOIN sysobjects AS o
 ON c.id = o.id
 WHERE c.text LIKE '%procedurename%';

もちろん、ここにはいくつかの危険があります:

  1. syscommentsプロシージャ > 4000 行を取り、それらを複数の行に分割します。そのため、大規模な手順では、検索文字列が境界点でしか言及されず、まったく表示されない可能性がわずかにあります。このような手順がリストに 2 回表示される可能性もあります (これGROUP BYを削除するには、 a を追加します)。
  2. 誤検知に注意してください。検索文字列をコメントに含めることができます。または、という名前のストアド プロシージャがGetAuthorSubscriptionsあり、探している場合は%GetAuthors%、引き続き表示されます。句で大文字と小文字を区別する検索を使用するとCOLLATE役立つ場合がありますが、必ずしもそれを排除するわけではありません。

詳細はこちら:

SQL Server 2000 から移行することを強くお勧めします。その他の 80 億の利点がない場合でも、このタスクは最新バージョンでははるかに簡単です。

ストアド プロシージャがデータベース内から呼び出されていない可能性があることに注意してください。これは、アプリからのアドホック呼び出し、誰かが開いている Management Studio のコピー、またはジョブである可能性があります。ジョブを検索するには、次を使用できます。

SELECT 
  job_name = j.name, 
  s.step_name
FROM msdb.dbo.sysjobs AS j
INNER JOIN msdb.dbo.sysjobsteps AS s
ON j.job_id = s.job_id
WHERE s.command LIKE '%procedurename%';

まだ上げてないの?サーバー側のトレース フィルタリングを実行するTextData LIKE '%procedurename%'...

于 2013-03-22T18:04:19.777 に答える