SQL-Server:是否存在相当于一般存储过程执行的触发器

Ray*_*Ray 2 sql-server logging triggers stored-procedures execution

希望你能帮忙.

有没有办法可靠地检测何时在SQL Server上运行存储过程而不改变SP本身?

这是要求.我们需要跟踪从我们的企业数据仓库运行报告的用户,因为我们使用的核心产品不允许这样做.核心产品报告和我们添加的一系列内部产品都会从单个存储过程中返回数据.

我们没有切实可行的方法来更改调用报告的产品网页部分.我们也无法更改核心产品报告的存储过程.(将记录行添加到每个内部的开始/结束都是微不足道的).

因此,我试图找到的是,SQL Server(2005/2008)中是否有一种方法可以在任何其他存储过程运行时执行日志记录存储过程,而无需更改这些存储过程本身.

我们对SQL Server实例本身具有一般控制权,因为它是本地的,我们只是不想自己更改产品存储过程.

有人有主意吗?有没有一种"存储过程执行触发器"?是否有SQL Server的事件模型,我们可以将自定义.Net代码挂钩到?(只是从一开始就打折它,我们想尝试对SQL Server进行更改,而不是从产品网页中捕获正在运行的报告等)

感谢赞赏
谢谢

Pau*_*ams 5

您可以设置SQL Server初始化时自动运行的后台跟踪.然后,在跟踪中,您可以将trace语句输出到表.

例如,打开SQL Server Profiler.创建您想要的跟踪,即包括SP:Starting和您想要的列.还可以选择将跟踪保存到表中.

现在,在设置脚本后,选择"文件/导出/脚本跟踪定义".这将创建一个生成跟踪的SQL语句.

接下来,创建一个使用SQL创建此跟踪的存储过程.在主数据库中安装proc并告诉SQL Server在启动时自动运行它:

exec sp_procoption N'sp_MyProc', N'startup', N'true'
Run Code Online (Sandbox Code Playgroud)

现在,每次SQL Server重新启动时,它都会自动配置跟踪,并且所有SP调用都将记录到表中.

- 编辑 -

另请注意,有一些动态管理视图(DMV)可用于监视存储过程.您可能对以下两种感兴趣:

例如,sys.dm_exec_procedure_stats将告诉您上次运行proc的时间,运行的次数,最长的执行时间等.请注意,这些视图仅影响当前在数据库缓存中的存储过程.如果卸载了proc,那么信息就是如此.