如何找出所有正在调用SQL Server 2005中特定用户定义函数的存储过程。
或如何在用户定义的函数中为参数分配无效值,以便在存储过程调用该函数且不将任何值传递给该参数时,函数将采用默认值。
问候,
阿比舍克·in那
最佳答案
QUERY sys.sql_modules
使用此过程,在其中传递函数名称:
CREATE PROCEDURE dbo.Find_Text
@SearchValue nvarchar(500)
AS
SELECT DISTINCT
s.name+'.'+o.name AS Object_Name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
INNER JOIN sys.schemas s ON o.schema_id=s.schema_id
WHERE m.definition Like '%'+@SearchValue+'%'
--AND o.Type='P' --<uncomment if you only want to search procedures
ORDER BY 1
GO
此过程在过程, View 和函数中搜索给定的字符串。您可以搜索任何字符串,而不仅仅是函数名称。您还可以在给定搜索词的中间添加通配符。
功能默认值
您可以为功能参数指定默认值。但是,当函数的参数具有默认值时,在函数检索默认值时必须指定关键字DEFAULT。此行为与在存储过程中使用具有默认值的参数不同,在存储过程中,省略参数也表示默认值。
试试看:
CREATE FUNCTION dbo.Just_Testing
(
@Param1 int
,@Param2 int=0
)
RETURNS varchar(100)
BEGIN
RETURN CONVERT(varchar(10),@Param1)+'-'+CONVERT(varchar(10),@Param2)
END
GO
PRINT 'hello world '+dbo.Just_Testing(2,default)+', '+dbo.Just_Testing(5,2)
GO
PRINT 'hello world '+dbo.Just_Testing(2 )+', '+dbo.Just_Testing(5,2)
输出:
hello world 2-0, 5-2
Msg 313, Level 16, State 2, Line 1
An insufficient number of arguments were supplied for the procedure or function dbo.Just_Testing.
但是我猜测您需要更改一个函数,将其添加为参数,现在需要在任何地方对其进行修复。这个
DEFAULT
仍然可以完成很多工作,因为您需要触摸对它的每次调用。SP_DEPENDS
您还可以使用sp_depends (Transact-SQL)查找该函数的每种用法。
关于sql - 查找所有调用函数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2833389/