在所有存储过程中查找表值函数

时间:2014-01-17 18:54:49

标签: sql sql-server-2005 sql-server-2012

我正在研究用于多个存储过程的TVF。如何找到使用该TVF的所有存储过程?

2 个答案:

答案 0 :(得分:4)

您可以搜索元数据以提及您的函数,请记住,如果这是其他地方或注释中提到的常用名称,则会产生误报,或者如果函数调用是使用动态SQL构建的,则会丢失实例。< / p>

SELECT s.name, p.name FROM sys.procedures AS p
  INNER JOIN sys.schemas AS s
  ON p.[schema_id] = s.[schema_id]
  INNER JOIN sys.sql_modules AS m
  ON p.[object_id] = m.[object_id]
  WHERE m.definition LIKE N'%tvfname%';

2012年还有其他方法,但由于这个问题也被标记为2005年......

答案 1 :(得分:1)

我已经成功使用了这个;

SELECT *
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE OBJECT_DEFINITION(OBJECT_ID(ROUTINE_NAME)) LIKE '%TVFn%'

最好不要搜索视图的ROUTINE_DEFINITION字段,因为它有上限。 PS - 无法在2005年测试,抱歉