2

約 100 のテーブルと約 250 のストアド プロシージャを含む巨大なデータベースがあります。ストアド プロシージャのサブセットによって影響を受けるテーブルの一覧を知りたいです。たとえば、250 個のストアド プロシージャのうち 50 個のストアド プロシージャのリストがあり、これら 50 個のストアド プロシージャの影響を受けるテーブルのリストを知りたいとします。すべてのストアド プロシージャを読み取り、テーブルのリストを手動で見つける以外に、これを行う簡単な方法はありますか?

PS: これには SQL Server 2000 および SQL Server 2005 クライアントを使用しています。

4

4 に答える 4

5

これは SQL Server クエリになります。

SELECT
    [NAME]
FROM
    sysobjects
WHERE
    xType = 'U' AND --specifies a user table object
    id in
    (
        SELECT 
            sd.depid 
        FROM 
            sysobjects so,
            sysdepends sd
        WHERE
            so.name = 'NameOfStoredProcedure' AND 
            sd.id = so.id
    )

これが誰かに役立つことを願っています。

于 2008-09-23T06:33:02.147 に答える
1

sp_depends'StoredProcName'は、ストアドプロシージャが依存するオブジェクト名とオブジェクトタイプを返します。

編集: @KGの答えの方が好きです。より柔軟な私見。

于 2008-09-23T06:28:03.327 に答える
1

SQL 2005 では次のようにします (特定の proc に対してのみ必要な場合は、「AND」行のコメントを外します)。

SELECT 
    [Proc] = SCHEMA_NAME(p.schema_id) + '.' + p.name,
    [Table] = SCHEMA_NAME(t.schema_id) + '.' + t.name,
    [Column] = c.name,
    d.is_selected,
    d.is_updated
FROM sys.procedures p
    INNER JOIN  sys.sql_dependencies d
        ON  d.object_id = p.object_id
        AND d.class IN (0,1)
    INNER JOIN  sys.tables t
        ON  t.object_id = d.referenced_major_id
    INNER JOIN  sys.columns c
        ON  c.object_id = t.object_id
        AND c.column_id = d.referenced_minor_id
WHERE   p.type IN ('P')
--  AND p.object_id = OBJECT_ID('MyProc')
ORDER BY 
    1, 2, 3
于 2008-09-23T06:40:05.687 に答える
-3

非常に侵襲的なオプションの 1 つは、複製データベースを取得し、何かが起こったことを記録するすべてのテーブルにトリガーを設定することです。次に、すべての SP を実行します。機能しない DB に多くの変更を加えることができない場合

また、トリガーを介して SP の影響を受けるテーブルも必要な場合は、既存のトリガーをログに置き換えるのではなく、必ずログを追加してください。

于 2008-09-23T06:05:32.663 に答える