【问题标题】:SQL Server 2008 : find out which stored procedures writes to certain tableSQL Server 2008:找出哪些存储过程写入某个表
【发布时间】:2014-10-24 10:09:41
【问题描述】:

我正在尝试寻找写入某个表的某个存储过程(它需要更改),但是遍历每个存储过程并不是我真正想要采取的路线。所以我希望有一种方法可以找出哪些存储过程INSERTUPDATE 某个表。

我尝试过使用这种方法 (pinal_daves_blog),但它没有给我任何结果。

注意:存储过程可能不在同一个数据库中!

还有其他方法吗,或者我可以以某种方式检查哪个过程/函数对表进行了最后一次插入或更新。

【问题讨论】:

    标签: sql-server sql-server-2008 stored-procedures insert sql-update


    【解决方案1】:

    一种蛮力方法是从 RedGate 下载一个名为 SQL Search(免费)的插件,然后对表名执行存储过程搜索。我根本不隶属于 RedGate 或其他任何东西,这只是我用来查找类似事物的一种方法,并且对我很有帮助。

    http://www.red-gate.com/products/sql-development/sql-search/

    如果你走这条路,你只需输入表名,将'object types' ddl 选择更改为'Procedures',然后在DB ddl 中选择'All databases'。

    希望这会有所帮助!我知道这不是最技术性的解决方案,但它应该可以工作。

    【讨论】:

      【解决方案2】:

      没有内置方法可以判断是哪个函数、过程或执行的批处理对表进行了最后一次更改。就是没有。一些数据库将此作为其事务日志的一部分,但 SQL Server 不是其中之一。

      我过去想知道事务复制是否可以提供该信息,如果您已经设置了该信息,但我不知道这是否正确。

      如果您知道必须在存储过程中进行更改(而不是使用 SSMS 或通过 ADO.NET 执行 SQL 行),那么@koppinjo 的建议是一个很好的建议,Pinal 的建议也是如此戴夫的blog

       USE AdventureWorks
       GO
       --Searching for Empoloyee table
       SELECT Name
       FROM sys.procedures
       WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
      

      还有依赖函数,尽管它们可能已过时或不完整:

      select * from sys.dm_sql_referencing_entities( 'dbo.Employee', 'object' )
      

      【讨论】:

        【解决方案3】:

        您可以在 Profiler 中运行跟踪。该过程必须在跟踪运行时写入表,以便您捕获它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-26
          • 2016-03-28
          • 1970-01-01
          • 2012-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多