How can i get the list of tables in the stored procedure

前端 未结 10 1800
终归单人心
终归单人心 2020-12-01 05:16

There are lot of tables and sp in the db. I find the tables name which are used in the specific sp (stored procedure).

sp_depends %sp_name% not give the

10条回答
  •  Happy的楠姐
    2020-12-01 05:52

    The two highest voted answers use a lot of deprecated tables that should be avoided.
    Here's a much cleaner way to do it.

    Get all the tables on which a stored procedure depends:

    SELECT DISTINCT p.name AS proc_name, t.name AS table_name
    FROM sys.sql_dependencies d 
    INNER JOIN sys.procedures p ON p.object_id = d.object_id
    INNER JOIN sys.tables     t ON t.object_id = d.referenced_major_id
    ORDER BY proc_name, table_name
    

    Works with MS SQL SERVER 2005+

    List of Changes:

    • sysdepends should be replaced with sys.sql_dependencies
      • The new table uses object_id instead of id
      • The new table uses referenced_major_id instead of depid
    • Using sysobjects should be replaced with more focused system catalog views
      • As marc_s pointed out, instead use sys.tables and sys.procedures
      • Note: This prevents having to check where o.xtype = 'p' (etc.)
    • Also, there is really no need for a CTE which uses ROW_NUMBER() just in order to make sure we only have one of each record set returned. That's what DISTINCT is there for!

      • In fact, SQL is smart enough to use DISTINCT behind the scenes.
      • I submit into evidence: Exhibit A. The following queries have the same Execution Plan!

        -- Complex
        WITH MyPeople AS (
          SELECT id, name,
          ROW_NUMBER() OVER(PARTITION BY id, name ORDER BY id, name) AS row
          FROM People)
        SELECT id, name
        FROM MyPeople
        WHERE row = 1
        
        -- Better
        SELECT DISTINCT id, name
        FROM People
        

提交回复
热议问题