UNIONキーワードを含むすべてのビューとSPを見つけるにはどうすればよいですか?
(別の質問:どのシステムテーブルにSPとビューのテキストが保存されているか)
ありがとうございました
UNIONキーワードを含むすべてのビューとSPを見つけるにはどうすればよいですか?
(別の質問:どのシステムテーブルにSPとビューのテキストが保存されているか)
ありがとうございました
これはやや素朴ですが実行可能な例です:(SQLServer2005および2008R2でテスト済み)
use msdb;
SElECT * FROM sys.all_sql_modules
WHERE
(definition LIKE '%CREATE VIEW%' OR
definition LIKE '%CREATE PROCEDURE%')
AND definition LIKE '%UNION%'
それを固めるには、object_idリンクを介して結合し、LIKEを使用するのではなく、オブジェクトタイプごとにビューとストアドプロシージャをフィルタリングします。
よりシンプル:
SElECT * FROM sys.all_sql_modules
WHERE definition LIKE '%UNION%'
警告:各オブジェクトの作成スクリプトに対してLIKE比較を実行しているため、コメントに含まれている場合はUNIONという単語も取り上げます。それはあなたにとっては問題ないかもしれませんが、結果をより決定論的にする必要があり、そのような場合を避ける必要がある場合は、WHERE句をより複雑にする必要があり、おそらく正規表現を使用して結果を絞り込みます。
INFORMATION_SCHEMA
個人的に私はビューを使用するのが好きです:
ストアドプロシージャの場合:
SELECT
*
FROM
INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_TYPE = 'PROCEDURE'
AND
--ROUTINE_DEFINITION LIKE '%union%' <-- 4,000 character limitation
OBJECT_DEFINITION(OBJECT_ID(SPECIFIC_SCHEMA + '.' + SPECIFIC_NAME))
LIKE '%union%'
そしてビューの場合:
SELECT
*
FROM
INFORMATION_SCHEMA.VIEWS
WHERE
--VIEW_DEFINITION LIKE '%union%' <-- 4,000 character limitation
OBJECT_DEFINITION(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME)) LIKE '%union%'
これらのビューは、現在使用しているデータベースの定義に限定されますUSE
。
または、Microsoft SQLServer2005および2008の強力な検索機能を提供するxSQLソフトウェアのすばらしいツールがあります。
更新:@Bogdanが指摘したように、INFORMATION_SCHEMA
定義は最初の4000文字に制限されています。回避策を含めるために回答を更新しました。この時点で、sys
ビューを追跡する方が簡単な場合があります。
それらのものはに保存されsys.sql_modules
ます。