gpt4 book ai didi

sql - 查找所有调用函数的存储过程

转载 作者:行者123 更新时间:2023-12-03 13:21:48 24 4
gpt4 key购买 nike

如何找出所有正在调用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com