在SQL Server 2005+上,如果从存储过程调用用户定义的函数,该函数是否有办法获取调用它的存储过程的名称?
这需要没有存储过程将参数传递给函数及其名称。
任何帮助我都非常感谢
答案 0 :(得分:1)
不传递参数,或以其他方式传递值,例如,通过将其存储在表中,并将唯一键传递给该值,这是不可能的。
答案 1 :(得分:1)
需要更多信息来提供具体答案,但以下是一些有用的选项。
要查找哪些存储过程调用您的函数:
SELECT name
FROM sys.procedures
WHERE object_definition(object_id) LIKE '%yourUDFname%'
然后您可以使用sys.dm_exec_procedure_stats
查找这些SP的上次执行时间:
SELECT name, last_execution_time
FROM sys.procedures p
JOIN sys.dm_exec_procedure_stats s on p.object_id = s.object_id
WHERE object_definition(p.object_id) LIKE '%yourUDFname%'
--ORDER BY last_execution_time DESC
如果您需要更多,最彻底但最耗时的选项是在SP中添加日志记录,这些日志记录在调用UDF时写入日志。