2

UNIONキーワードを含むすべてのビューとSPを見つけるにはどうすればよいですか?

(別の質問:どのシステムテーブルにSPとビューのテキストが保存されているか)

ありがとうございました

4

3 に答える 3

3

これはやや素朴ですが実行可能な例です:(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句をより複雑にする必要があり、おそらく正規表現を使用して結果を絞り込みます。

于 2011-10-12T14:06:28.323 に答える
3

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ビューを追跡する方が簡単な場合があります。

于 2011-10-12T14:11:56.967 に答える
2

それらのものはに保存されsys.sql_modulesます。

于 2011-10-12T14:06:36.557 に答える