Database 如何获取受一组存储过程影响的表列表?

Database 如何获取受一组存储过程影响的表列表?,database,stored-procedures,Database,Stored Procedures,我有一个巨大的数据库,大约有100个表和250个存储过程。我想知道受存储过程子集影响的表列表。例如,我有一个250个存储过程中的50个存储过程的列表,我想知道受这50个存储过程影响的表的列表。除了读取所有存储过程并手动查找表列表之外,还有什么简单的方法可以做到这一点吗 PS:我正在为此使用SQL Server 2000和SQL Server 2005客户端。一个非常具有侵入性的选项是获取一个重复的数据库,并在记录发生事件的每个表上设置触发器。然后运行所有SP。如果你不能对数据库做很多修改,那就不

我有一个巨大的数据库,大约有100个表和250个存储过程。我想知道受存储过程子集影响的表列表。例如,我有一个250个存储过程中的50个存储过程的列表,我想知道受这50个存储过程影响的表的列表。除了读取所有存储过程并手动查找表列表之外,还有什么简单的方法可以做到这一点吗


PS:我正在为此使用SQL Server 2000和SQL Server 2005客户端。

一个非常具有侵入性的选项是获取一个重复的数据库,并在记录发生事件的每个表上设置触发器。然后运行所有SP。如果你不能对数据库做很多修改,那就不行了


此外,如果您还希望SP通过触发器生效的表,请确保将日志添加到现有触发器中,而不是将其替换为日志记录。

SP_依赖的“StoredProcName”将返回存储过程所依赖的对象名和对象类型


编辑:我更喜欢@KG的答案。更灵活的IMHO。

这将是您的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
    )

希望这对其他人有所帮助。

我会在SQL 2005中这样做(如果您只想在特定过程中使用“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