是否有可能找出谁调用了商店程序? ,我正在使用以下查询来识别执行计数等,但我无法确定哪个作业/触发器/进程正在调用它。请关于它的任何想法
SELECT a.execution_count ,OBJECT_NAME(objectid) Name,
(CASE WHEN a.statement_end_offset = -1
THEN
len(convert(nvarchar(max), b.text)) * 2
ELSE
a.statement_end_offset
END - a.statement_start_offset)/2 ) ,b.dbid ,dbname = db_name(b.dbid) , b.objectid
,a.creation_time,a.last_execution_time,a.*
FROM sys.dm_exec_query_stats a CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) as b
WHERE OBJECT_NAME(objectid) = 'Rebuild_Indexes' ORDER BY a.last_execution_time
ESCquery_text = SUBSTRING(b.text,a.statement_start_offset/2,
答案 0 :(得分:3)
如果您想查看谁正在执行存储过程,那么解决此问题的一种方法是创建服务器端Trace并捕获SP:Completed
事件。此事件类提供的数据将为您提供所需的所有来电者信息。
答案 1 :(得分:3)
使用Adam Machanic的Who is Active存储过程 - 返回有关活动语句的各种信息,包括启动它们的用户。
答案 2 :(得分:2)
好吧,如果你启动SQL分析器,它会显示NT用户的网络ID,我建议你在服务器上运行跟踪分析器,如果偶尔使用的话。或者,如果您没有使用简单恢复模式,那么答案将在事务日志备份中。然而,这不容易分析或阅读。
答案 3 :(得分:1)
使用Dynamic Management Views选项。 DMV提供了一个简单而熟悉的关系接口,用于从SQL Server收集关键系统信息。
SELECT DB_NAME(der.database_id) AS databaseName,
OBJECT_NAME(objectid),
der.session_id,
login_name,
USER_NAME(der.user_id) AS user_name,
der.command,
dest.text AS [CommandText],
des.login_time,
des.[host_name],
dec.client_net_address,
des.[program_name],
der.status
FROM sys.dm_exec_requests der
INNER JOIN sys.dm_exec_connections dec ON der.session_id = dec.session_id
INNER JOIN sys.dm_exec_sessions des ON der.session_id = des.session_id
CROSS APPLY sys.dm_exec_sql_text (sql_handle) AS dest
WHERE des.is_user_process = 1
--AND OBJECT_NAME(objectid) = 'Rebuild_Indexes'