私はテーブルとストアドプロシージャの100の巨大なデータベースを持っています。 SQL Server 2005を使用して、特定のテーブルに対して挿入操作または更新操作を実行するストアドプロシージャの一覧を取得する方法を教えてください。テーブルのストアドプロシージャのリスト
答えて
select
so.name,
sc.text
from
sysobjects so inner join syscomments sc on so.id = sc.id
where
sc.text like '%INSERT INTO xyz%'
or sc.text like '%UPDATE xyz%'
これは(あなたが明らかにスーツにクエリを微調整することができます)あなたの特定のテーブルのためにそれらの中にINSERTまたはUPDATEを持つすべてのストアドプロシージャの内容のリストが表示されます。返されたレコードセットの複数の行にまたがって長い手続きが壊れてしまいますので、結果を手作業で少しずつ調べる必要があります。
を編集する:SP名を返すように調整されたクエリ。また、上記のクエリでは、SPと同様にUDFも返されます。
すべてのストアドプロシージャをテキストファイルにエクスポートしてから簡単な検索を実行できます。
より高度な手法は、すべてのSELECT FROMエントリとINSERT FROMエントリを検索するために正規表現検索を使用することです。
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND (SC.Text LIKE '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name
This linkをSP検索のリソースとして使用しました。 sp_dependsは
これは動作するようです:
select
so.name as [proc],
so2.name as [table],
sd.is_updated
from sysobjects so
inner join sys.sql_dependencies sd on so.id = sd.object_id
inner join sysobjects so2 on sd.referenced_major_id = so2.id
where so.xtype = 'p' -- procedure
and is_updated = 1 -- proc updates table, or at least, I think that's what this means
あなたはVyasknのウェブサイトからsp_search_codeをダウンロードした場合、それはあなたがあなたのデータベースオブジェクト内の任意のテキストを検索できるようになります。
http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm
sys.sql_dependencies
SPROCがクエリに含まれるテーブルや列などの依存関係を持つエンティティのリストを持っています。依存関係を取得するクエリの例については、this postを参照してください。以下のコードスニペットは、ストアドプロシージャによるテーブル/カラムの依存関係のリストを取得します。
select sp.name as sproc_name
,t.name as table_name
,c.name as column_name
from sys.sql_dependencies d
join sys.objects t
on t.object_id = d.referenced_major_id
join sys.objects sp
on sp.object_id = d.object_id
join sys.columns c
on c.object_id = t.object_id
and c.column_id = d.referenced_minor_id
where sp.type = 'P'
[MSDN Library](http://msdn.microsoft.com/en-us/library/ms174402.aspx)には、これは廃止予定であるため、sys.sql_expression_dependenciesに置き換える必要があります。残念ながら私は同等の作業をすることはできません。答えに表示されるクエリでは、d.object_idは存在しません。私はd.referencing_idを試しましたが、それもうまくいきませんでした。どのようにsql_expression_dependenciesを使用するか? – Drew
'sys.sql_expression_dependencies'では、' referencing_id'はターゲットを参照する項目、 'referenced_id'は依存関係です。テーブルには、テーブル内の参照されるエンティティのスキーマ名とエンティティ名も含まれます。マイナーIDは列番号を参照し、0は特定の列参照を示さない。 – ConcernedOfTunbridgeWells
私はそれをすべて持っていると思う。問題は、すべてのsql_expression_dependencies行にreferenced_minor_idの0があることです。 sql_dependenciesの類似のクエリでは、ゼロ以外の行が多く返されましたが、結果が異なることに驚いています。私はしばしば特定の列を参照しているsprocsを見たいので、効果的にsql_expression_dependenciesをあまり役に立たないように思えます。 参照のために、私はreferenced_minor_id <> 0の両方からselect count(*)を実行しました。sql_dependenciesに38119行、sql_expression_dependenciesに112行あります。 – Drew
- 1. ストアドプロシージャのDataSetのテーブル名
- 2. ストアドプロシージャのテーブル変数の複合プライマリキー
- 3. tempテーブルのストアドプロシージャでdatetimeの行をソート
- 4. ExcelのテーブルSQL Serverストアドプロシージャのパラメータフィールドとワークブック
- 5. シーケンスIDのリストを返すストアドプロシージャ
- 6. mysqlストアドプロシージャのパラメータをリストする方法
- 7. db2ストアドプロシージャ。ロック/解放テーブル
- 8. ストアドプロシージャからテーブルを返す
- 9. Androidテーブルのリストを取得
- 10. リスト<string>をストアドプロシージャに渡す
- 11. リストをTSQL 2008ストアドプロシージャに渡す
- 12. VBA(Excel ADODB ODBC):任意のデータベースからストアドプロシージャとテーブルのリストを取得しますか?
- 13. MySQL:ストアドプロシージャをテーブルにリンクする方法
- 14. ストアドプロシージャからテーブルを更新する
- 15. テーブル関数に結合されたストアドプロシージャ?
- 16. テーブルに挿入Teradata動的ストアドプロシージャSQL
- 17. ストアドプロシージャでテーブル名を動的に決定
- 18. mysqlストアドプロシージャ内にテーブルを作成する
- 19. OracleストアドプロシージャPowerShellにテーブル構造を返す
- 20. テーブル名をパラメータとして持つストアドプロシージャ
- 21. テーブル値のパラメータを受け入れるストアドプロシージャのテーブル引数を生成する
- 22. 従来のADOとストアドプロシージャのテーブル値のパラメータ
- 23. 同じテーブルからの検索のためのmysqlストアドプロシージャ
- 24. ストアドプロシージャの行をTSQLの別のテーブルに連結する
- 25. SQL Server:ストアドプロシージャの入力テーブルの変数の回避策
- 26. ストアドプロシージャの結果をC#のリストに渡す
- 27. MySQLのストアドプロシージャを回避するデータのリストを返す
- 28. ストアドプロシージャを作成してテーブルのリストを反復処理し、それらをMySQLで切り捨てます。
- 29. ストアドプロシージャ/ ColdFusionのSelectクエリに基づくテーブルの更新
- 30. postgresqlストアドプロシージャのすべてのテーブルを処理する
これは私にSP IDを与えています...私はこのIDでSP名に到達できますか? – Vinodtiru
うん、私はそれを含めるためにクエリを微調整しました。私は今あなたにそれをもらう他のいくつかの答えが掲載されているのを見る。 –
私の答えはこちら:http://stackoverflow.com/questions/119679/list-of-stored-procedure-from-table#119719はほぼ同じです(名前を返します)。しかし、私は答えが –