4

私は MS の世界についてあまり知りませんが、たまたま SQL Server Management Studio 2008 を使用しなければならなくなりました。

私の問題: テーブルに列があり、その列で動作している可能性のあるすべてのストアド プロシージャを確認する必要があります。

右クリックして「依存関係の表示」を試してみましたが、本来あるべきすべてが返されていないようです。

次のような質問: SQL Server の依存関係には、3 種類のソリューションを提供する回答があります。

  1. 有料のサードパーティ ツール。
  2. 独自のスクリプトを作成します。
  3. すべてをテキスト ファイルにエクスポートし、それらを grep します。

なんてこと?明らかな何かが欠けていますか?それは実際に物事がどのように機能するのですか?これは非常に一般的な使用例だと思います。テーブルを変更したいが、何も壊さないようにしたいのです。または、DB を使用した新しいプロジェクトを初めて見ていて、特定の列にストアド プロシージャがどのように入力されるかを確認したいとします。これを行うための迅速で簡単な組み込みワークフローは実際にはありませんか?

4

5 に答える 5

8

データベース オブジェクト (テーブル、列、トリガーなど) を名前で検索する必要がある場合は、これを行うSQL 検索と呼ばれる無料のRed-Gate ツールを参照してください。データベース全体であらゆる種類の文字列を検索します。

ここに画像の説明を入力

ここに画像の説明を入力

これは、DBA やデータベース開発者にとって欠かすことのできない優れたツールです。

于 2012-06-27T14:56:25.940 に答える
1

このクエリを使用します:

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%YOUR COLUMN %' 
AND ROUTINE_TYPE='PROCEDURE'
于 2012-06-27T15:08:22.970 に答える
1

テキストを検索したり、サードパーティのアプリケーションを使用したりせずに、列レベルの依存関係をすばやく特定する方法を見つけるのにかなりの時間を費やしました。もう 1 つの課題は、テーブル名が繰り返される可能性がある複数のデータベース間で依存関係を見つけることです。これは、SP テキストを検索するときに誤検出を引き起こします。

SQL 2008 では、データベース間の依存関係をフィールド レベルで返す関数があります。

以下のコードは、いくつかの例外を除いて機能します。

  • 削除されたテーブル/フィールドに無効な参照を持つストアド プロシージャがある場合は失敗します (ちなみに、これは、テーブルの変更によって誤って破損した SP を見つけるのに役立つことがわかりました)。
  • SP が異常な方法で一時テーブルを使用している場合、すべての依存関係が検出されるわけではありません。
  • 場合によっては、複雑なストアド プロシージャに対して誤検知を返すことがわかりました。

MSDN ドキュメント

このコードは、SP が存在するデータベース内から実行して、他のデータベースの依存関係にまたがることができるようにする必要があります。

SELECT      
--SP, View, or Function
ReferencingName = o.name,
ReferencingType = o.type_desc,

--Referenced Field
ref.referenced_database_name, --will be null if the DB is not explicitly called out
ref.referenced_schema_name, --will be null or blank if the DB is not explicitly called out
ref.referenced_entity_name,
ref.referenced_minor_name

FROM sys.objects AS o 
cross apply sys.dm_sql_referenced_entities('dbo.' + o.name, 'Object') ref
where o.type in ('FN','IF','V','P','TF')
于 2014-04-03T18:23:03.110 に答える
0

「依存関係の表示」ダイアログで依存関係を確認できないのはなぜですか。それでも、「sys.sql_expression_dependencies」システム ビューをクエリして、必要な依存関係情報を取得できます。

SELECT OBJECT_NAME(referencing_id),OBJECT_NAME(referenced_id)  
FROM sys.sql_expression_dependencies 
WHERE referenced_id = OBJECT_ID('XXX')

もちろん、必要な他の情報を投影することもできます。

于 2012-06-27T15:03:33.690 に答える