SQL Serverでは、スキーマの変更がストアドプロシージャ(および/またはビュー)に影響を与えるかどうかを確認する方法はありますか?
たとえば、1つのテーブルの列名を変更すると、一部のストアドプロシージャが破損する可能性があります。影響を受けるストアドプロシージャを確認する方法は?
8 に答える
使用してみてください:
EXEC sp_depends 'YourTableName'
および/または
DECLARE @Search nvarchar(500)
SET @Search='YourTableName' --or anything else
SELECT DISTINCT
LEFT(o.name, 100) AS Object_Name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
WHERE m.definition Like '%'+@Search+'%'
ORDER BY 2,1
T-SQL の開発には Visual Studio Database Edition を使用します。展開 .dbschema ファイルを作成するため、ビルド中にこのような問題が検出されます。
SSMS(SQL Server Management Studio)で、変更するオブジェクトを右クリックし、[依存関係の表示]をクリックします。これで別のデータベースからの参照が見つかるとは思いません。
暗号化されていない場合は、ストアドプロシージャで参照を探すこともできます。変更するオブジェクトを参照している可能性があると思われる各データベースでこれを行う必要があります。
sys.sql_modulesからobjects.name、sql_modules.definitionを選択します。sql_modulesはsql_modules.object_id=objects.object_idのsys.objectsオブジェクトに参加します。
100.0000%正確な100.000000%の時間は何も見つかりませんでした。
これを行う最善の方法は、ビューを使用して実際のテーブルからストアド プロシージャを抽象化し、ビューを壊すような変更を防ぐ必要がある "WITH SCHEMABINDING" 句を使用してそれらのビューを作成することです...
オブジェクトまたは列の名前を変更する場合、Red Gate Software のSQL Prompt 5のSmart Rename機能は、名前変更を実行し、他のオブジェクトの古い名前への参照を更新するスクリプトを生成します。
列名に依存するものだけに興味がある場合は、SQL Prompt 5 にも列の依存関係機能があり、スクリプトで列名にカーソルを合わせると、その列を参照するオブジェクトのリストを含むウィンドウがポップアップ表示されます。
14 日間の試用版を無料でダウンロードして、これらの機能のいずれかが機能するかどうかを確認できます。
Paul Stephenson
SQL プロンプト プロジェクト マネージャー
Red Gate Software
Red Gate の SQL Refactorなどの商用ツールでこれを行うことができます。Visual Studio
の最近のバージョンにもこの種の機能が含まれていると思いますが、試していません。
私の知る限り、これを行う Microsoft SQL Server自体の組み込み機能は ありません。訂正: この投稿に対する KM の回答でsp_dependsについて読んだところです... sp_depends の使用法は非推奨であることに注意してください。sys.dm_sql_referencing_entitiesおよびsys.dm_sql_referenced_entitiesに置き換えられました。
また、基礎となるストアド プロシージャが動的 SQLを使用している場合、依存関係を検出するタスクがより困難になり、「ミス」が発生しやすくなります。
これらの答えを見てください:
スキーマではなくストアドプロシージャに埋め込まれたSQLServerの関係
SQL Serverでは、列が参照されているすべての場所を見つけるにはどうすればよいですか?
レコードを挿入、更新、または削除するすべてのストアドプロシージャを見つけるにはどうすればよいですか?
動的SQLを除いて、可能な場合はSCHEMABINDINGを使用し、その他すべてにsp_refreshsqlmoduleとsql_dependenciesを使用することは非常に正確です。