6

テーブルにエントリを作成するストアドプロシージャを見つける方法はありますか。例えば言う:特定のテーブルに挿入するストアドプロシージャを検索します。

ストアドプロシージャAは、表Aに挿入
格納されたテーブルAにProceudre Bインサート
格納されたテーブルBに手順Cを挿入

Iは、ストアドプロシージャの名前を返すように照会しますAとストアドプロシージャB.

Iveはこれを今でも持っていますが、Stored Proceduresを見つけるだけです。私はそれがストアドプロシージャを見つけるための良い出発点になると思います。

SELECT OBJECT_NAME(object_id) 
FROM sys.sql_modules 
WHERE definition LIKE '%TablenameIWanttoFind%' 

あなたが検索でき文言の特定されている場合:

 

select schema_name(schema_id) as [schema], 
     name 
from sys.procedures 
where name like '%Item%' and name like '%Create%' 
 

は、私が2008

答えて

9

あなたはすべてのprocsとビューのテキストが含まれsys.sql_modulesを検索することができ、マイクロソフトSQLを使用しています何かのように'INSERT INTO mytable'

+0

+1あなたがすべきその本当に一つだけので 'sys.sql_modules'は、(だけでなく' NVARCHAR(4000) 'の)ストアドプロシージャの**全体**定義を持っている唯一の図です。この場合は – Lamak

+0

を使用していただきありがとうございます。たとえば、ストアドプロシージャが暗号化されているとします。この機能は引き続き検索することができますか? – user489041

+0

@user - 私はそれを試したことはありません。おそらくそうではないでしょう。 – JNK

1

なぜ以下のクエリを使用しないでください。

select O.name from sysobjects O 
Join Syscomments C 
on O.id=C.id 
Where C.text like '%insert into%Table_name%' 

このクエリから、文字通り特定のテキストを含むプロシージャを見つけることができます。

0

は、を特定のテーブルに挿入するストアドプロシージャを見つける方法を質問します。

名前を含むストアドプロシージャを検索すると、多数の選択に対してテーブルが参照されている場合、誤検出がかなり発生する可能性があります。

sys.sql_dependenciesここでは、挿入のために1にも設定されたis_updatedフラグが含まれているので、ここでは役立ちます。

SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(OBJECT_NAME(object_id)) 
FROM sys.sql_dependencies 
WHERE referenced_major_id = OBJECT_ID('YourTable') 
     AND is_updated = 1 
GROUP BY object_id 
関連する問題