SQL Server 2000 を使用して、すべてのトリガー プロシージャでグローバルにパターンを検索する方法はありますか?
ストアド プロシージャが呼び出されている場所が隠れています。
初めての投稿ですのでお手柔らかに。
SQL Server 2000 を使用して、すべてのトリガー プロシージャでグローバルにパターンを検索する方法はありますか?
ストアド プロシージャが呼び出されている場所が隠れています。
初めての投稿ですのでお手柔らかに。
これにより、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%';
もちろん、ここにはいくつかの危険があります:
syscomments
プロシージャ > 4000 行を取り、それらを複数の行に分割します。そのため、大規模な手順では、検索文字列が境界点でしか言及されず、まったく表示されない可能性がわずかにあります。このような手順がリストに 2 回表示される可能性もあります (これGROUP BY
を削除するには、 a を追加します)。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%'
...