【问题标题】:SQL Server 2008 : find out which stored procedures writes to certain tableSQL Server 2008:找出哪些存储过程写入某个表
【发布时间】:2014-10-24 10:09:41
【问题描述】:
我正在尝试寻找写入某个表的某个存储过程(它需要更改),但是遍历每个存储过程并不是我真正想要采取的路线。所以我希望有一种方法可以找出哪些存储过程INSERT 或UPDATE 某个表。
我尝试过使用这种方法 (pinal_daves_blog),但它没有给我任何结果。
注意:存储过程可能不在同一个数据库中!
还有其他方法吗,或者我可以以某种方式检查哪个过程/函数对表进行了最后一次插入或更新。
【问题讨论】:
标签:
sql-server
sql-server-2008
stored-procedures
insert
sql-update
【解决方案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 中运行跟踪。该过程必须在跟踪运行时写入表,以便您捕获它。