如何获取特定存储过程中使用的所有表名?

Dip*_*iya 5 sql sql-server

我需要获取在特定存储过程中使用的所有数据库表名称?

作为一个例子,我有一个存储过程如下所示.

CREATE PROCEDURE [dbo].[my_sp_Name]
    @ID INT = NULL
AS
BEGIN

    SELECT ID, NAME, PRICE

    FROM tbl1
    INNER JOIN tbl2 ON tbl1.ProductId = tbl2.ProductId
    LEFT JOIN tbl3 ON tbl2.ProductSalesDate = tbl3.ProductSalesDate
    LEFT JOIN tbl4 ON tbl1.ProductCode = tbl4.ItemCode
END
Run Code Online (Sandbox Code Playgroud)

预期产量:

Used_Table_Name

  1. TBL1
  2. TBL2
  3. TBL3
  4. tbl4

任何人都可以建议一种方式吗?

Man*_*oor 2

使用以下脚本获取存储过程中的表名称:

  SELECT DISTINCT [object_name] = SCHEMA_NAME(o.[schema_id]) + '.' + o.name
        , o.type_desc
  FROM sys.dm_sql_referenced_entities ('[dbo].[Your_procedurename]',  
  'OBJECT')d
  JOIN sys.objects o ON d.referenced_id = o.[object_id]
  WHERE o.[type] IN ('U', 'V')
Run Code Online (Sandbox Code Playgroud)