如何找出正在调用SQL Server2005中特定用户定义函数的所有存储过程。
或者如何为用户定义的函数中的参数分配默认值,以便在存储过程调用该函数但没有向该参数传递任何值时,函数采用默认值。
问候,Abhishek jain
发布于 2014-11-19 17:40:38
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
发布于 2010-05-14 18:35:39
只需使用此过程来查找存储过程中的任何文本。
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
发布于 2010-05-14 20:51:12
按照hgulyan的建议,在使用SYSCOMMENTS表时需要小心。该表将对象的定义拆分为多行,如果它被拆分到两个条目中,则可能会导致搜索条件丢失。在SQL2005和更高版本中,您可以改用SYSMODULES表。运行以下代码来查看不同之处,并在使用syscomments方法时查找关键字(例如,可能是您的搜索短语)被分成多行的情况。
SELECT TOP 1000 SO.NAME, SC.TEXT
FROM SYS.SYSOBJECTS SO
JOIN SYS.SYSCOMMENTS SC
ON SO.ID = SC.ID
WHERE SO.TYPE = 'P'
ORDER BY SO.NAME, SC.COLID
SELECT TOP 1000 SO.NAME, SM.DEFINITION
FROM SYS.SYSOBJECTS SO
JOIN SYS.SQL_MODULES SM
ON SO.ID = SM.[OBJECT_ID]
WHERE SO.TYPE = 'P'
ORDER BY SO.NAME
https://stackoverflow.com/questions/2833389
复制相似问题