【问题标题】:How to find the stored procedures acting on a table in SQL Server 2012?如何在 SQL Server 2012 中查找作用于表的存储过程?
【发布时间】:2015-07-25 04:51:19
【问题描述】:

我在数据库中有一个表。表的字段正在被其他表中的某个存储过程更新。有没有可能我可以找到作用于特定表的存储过程???

【问题讨论】:

    标签: sql-server stored-procedures sql-server-2012


    【解决方案1】:

    如果您想知道哪些存储过程可能会触及您的表,您可以在 sys.procedures 中搜索以下内容:

    select * from sys.procedures 
    where object_definition(object_id) like '%tablename%'
    
    -- or probe information_schema
    select * from information_schema.routines
    where routine_definition like '%tablename%'
    

    Object_Definition

    返回指定对象定义的 Transact-SQL 源文本。 https://msdn.microsoft.com/en-us/library/ms176090(v=sql.105).aspx

    当我们查看 sys.procedures 时,会有一个名为 object_id 的字段。 SQL Server 中的每个对象都有一个 ID。 object_definition 将检索该对象的定义 - 在我们的例子中,将检索过程的文本。

    【讨论】:

    • object_definition(object_id) 返回什么信息?能详细点吗?
    【解决方案2】:

    查看sys.dm_sql_referencing_entities 视图。

    但如果 SP 构建动态 SQL 来访问表(未绑定架构),这将不起作用。您可能需要使用 trace 或 SQL Profiler 来提供帮助。

    【讨论】:

      【解决方案3】:

      也许你使用这个查询。您在实际数据库中有一个列表存储过程

       SELECT ROUTINE_NAME   FROM INFORMATION_SCHEMA.ROUTINES
          WHERE ROUTINE_TYPE= 'PROCEDURE'
      

      【讨论】:

      • 问题的目的是从表名了解存储过程。不是 db 中存在的存储过程列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2017-04-12
      相关资源
      最近更新 更多