Abh*_*ain 18 sql sql-server-2005 user-defined-functions
如何找出在SQL Server 2005中调用特定用户定义函数的所有存储过程.
或者如何将defult值分配给用户定义函数中的参数,以便当存储过程调用该函数并且不将任何值传递给该参数时,函数将采用默认值.
此致,Abhishek耆那教
KM.*_*KM. 28
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
Run Code Online (Sandbox Code Playgroud)
此过程在给定字符串的过程,视图和函数内搜索.您可以搜索任何字符串,而不仅仅是函数名称.您还可以在给定搜索词的中间包含通配符.
功能
默认值您可以指定功能参数的默认值.但是,当函数的参数具有默认值时,必须在检索默认值的函数时指定关键字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)
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
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.
Run Code Online (Sandbox Code Playgroud)
但我猜你需要更改一个函数,添加为参数,现在需要在任何地方修复它.这DEFAULT
仍然是同样多的工作,因为你需要触摸每次调用它.
SP_DEPENDS
您还可以使用sp_depends(Transact-SQL)查找函数的每个用法.
小智 6
declare @SearchValue as varchar(50)
set @SearchValue = 'GETUTCDATE'
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
Run Code Online (Sandbox Code Playgroud)
只需使用此过程查找存储过程中的任何文本.
CREATE PROCEDURE [dbo].[Find_Text_In_SP]
@StringToSearch varchar(100)
AS
SET @StringToSearch = '%' +@StringToSearch + '%'
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND SC.Text LIKE @stringtosearch
ORDER BY SO.Name
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27601 次 |
最近记录: |