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

标签 sql sql-server-2005 user-defined-functions

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

相关文章:

sql - 将 header 包含到 SQL 查询的结果中

sql - 如何使mysql结构的up,down rating

mysql - sql - 如何检索不属于表的值

sql-server - SQLServer 2005 中 Postgres 的 RAISE NOTICE 相当于什么?

sql-server - 安装 SQL Server 2008 时删除 Visual Studio 2008 安装的 SQL Server 2005 Express 是否安全?

sql-server - SQL Server - CASE 中的 CASE 检查 NULL

php - 如果 Post 值与其他 post 值相等则回显“失败”;?

c# - 使用 XML 进行批量插入

c - C 编程初学者的家庭作业帮助

group-by - Cassandra 分组依据和过滤结果