如何查找包含给定字符串的存储过程
How to find stored procedure which contains given string
我在我的数据库中创建了很多存储过程。
但我需要搜索其定义中包含 'welcome to' 的存储过程。
我可以通过 sp_helptext 检查每个存储过程
我有很多存储过程所以我无法使用 sp_help 检查每个存储过程,因为它很耗时
如果可以请帮忙
使用INFORMATION_SCHEMA.ROUTINES
。
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%welcome to%'
AND ROUTINE_TYPE = 'PROCEDURE'
SELECT sm.object_id,
Object_name(sm.object_id) AS object_name,
sm.definition
FROM sys.sql_modules AS sm
JOIN sys.objects AS o
ON sm.object_id = o.object_id
WHERE type_desc = 'SQL_STORED_PROCEDURE'
AND definition LIKE'%welcome to%'
您可以使用系统视图 SYS.SQL_MODULES
和 SYS.OBJECTS
我创建了存储过程来查找任何类型对象中的任何文本
在下方查看
CREATE PROCEDURE [SearchFromObjects]
(
@SearchString NVARCHAR(500) = NULL,
@SearchObjectList VARCHAR(50) = NULL
)
AS
BEGIN
SET NOCOUNT ON
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
DECLARE @sqlQuery NVARCHAR(1000)
SELECT @SearchObjectList = ''''+REPLACE(@SearchObjectList, ',', ''',''')+''''
IF ISNULL(@SearchString, '') <> ''
BEGIN
SELECT @sqlQuery = ' SELECT SYS_OBJ.NAME AS [OBJECT_NAME],
CASE
WHEN SYS_OBJ.TYPE = ''P''
THEN ''PROCEDURE''
WHEN SYS_OBJ.TYPE = ''TR''
THEN ''TRIGGER''
WHEN SYS_OBJ.TYPE = ''FN''
THEN ''SCALAR FUNCTION''
WHEN SYS_OBJ.TYPE = ''TF''
THEN ''TABLE-VALUED FUNCTION''
WHEN SYS_OBJ.TYPE = ''IF''
THEN ''INLINE TABLE-VALUED FUNCTION''
WHEN SYS_OBJ.TYPE = ''V''
THEN ''VIEW''
END [OBJECT_TYPE]
FROM SYS.SQL_MODULES SYS_MOD
INNER JOIN SYS.OBJECTS SYS_OBJ ON SYS_OBJ.OBJECT_ID = SYS_MOD.OBJECT_ID
WHERE SYS_MOD.DEFINITION LIKE ''%'+@SearchString+'%''' +
CASE
WHEN ISNULL(@SearchObjectList, '') <> ''
THEN ' AND SYS_OBJ.TYPE IN('+@SearchObjectList+') '
ELSE '' END +
' ORDER BY SYS_OBJ.TYPE '
END
IF(ISNULL(@SearchString, '') = '')
BEGIN
PRINT 'Error : Incorrect Syntax...!!! '
PRINT ' '
PRINT '-----------------------------------'
PRINT 'Procedure Can take two arguments '
PRINT '-----------------------------------'
PRINT '[1] Search String : string to search in object defination (Required)'
PRINT ' Syntax : EXEC [SearchFromObjects] ''<<String to search>>'''
PRINT ' For Example : EXEC [SearchFromObjects] ''Welcome to'''
PRINT '[2] Search Object type : list of object type in which user want to search (Optional)'
PRINT ' Syntax : EXEC [SearchFromObjects] ''<<String to search>>'', ''<<List of object type seperated by comma>>'''
PRINT ' For Example : EXEC [SearchFromObjects] ''Welcome to'', ''P,TR,FN,TF,IF,V'''
PRINT ' '
PRINT 'List of allowed object types'
PRINT '---------------------------------------'
PRINT ' TYPE DESCRIPTION '
PRINT '---------------------------------------'
PRINT ' P PROCEDURE '
PRINT ' TR TRIGGER '
PRINT ' FN SCALAR FUNCTION '
PRINT ' TF TABLE-VALUED FUNCTION '
PRINT ' IF INLINE TABLE-VALUED FUNCTION '
PRINT ' V VIEW '
PRINT '---------------------------------------'
END
ELSE
BEGIN
EXECUTE(@sqlQuery)
END
SET NOCOUNT OFF
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
END
GO
只需传递两个参数 1) 字符串 ('Welcome to') 和 2) 对象类型('P' 过程)然后您将获得包含您的搜索字符串的存储过程名称
EXEC [SearchFromObjects] 'Welcome to', 'P'
您可以不带任何参数执行 [SearchFromObjects] 以获得更多帮助
我在我的数据库中创建了很多存储过程。 但我需要搜索其定义中包含 'welcome to' 的存储过程。 我可以通过 sp_helptext 检查每个存储过程 我有很多存储过程所以我无法使用 sp_help 检查每个存储过程,因为它很耗时
如果可以请帮忙
使用INFORMATION_SCHEMA.ROUTINES
。
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%welcome to%'
AND ROUTINE_TYPE = 'PROCEDURE'
SELECT sm.object_id,
Object_name(sm.object_id) AS object_name,
sm.definition
FROM sys.sql_modules AS sm
JOIN sys.objects AS o
ON sm.object_id = o.object_id
WHERE type_desc = 'SQL_STORED_PROCEDURE'
AND definition LIKE'%welcome to%'
您可以使用系统视图 SYS.SQL_MODULES
和 SYS.OBJECTS
我创建了存储过程来查找任何类型对象中的任何文本
在下方查看
CREATE PROCEDURE [SearchFromObjects]
(
@SearchString NVARCHAR(500) = NULL,
@SearchObjectList VARCHAR(50) = NULL
)
AS
BEGIN
SET NOCOUNT ON
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
DECLARE @sqlQuery NVARCHAR(1000)
SELECT @SearchObjectList = ''''+REPLACE(@SearchObjectList, ',', ''',''')+''''
IF ISNULL(@SearchString, '') <> ''
BEGIN
SELECT @sqlQuery = ' SELECT SYS_OBJ.NAME AS [OBJECT_NAME],
CASE
WHEN SYS_OBJ.TYPE = ''P''
THEN ''PROCEDURE''
WHEN SYS_OBJ.TYPE = ''TR''
THEN ''TRIGGER''
WHEN SYS_OBJ.TYPE = ''FN''
THEN ''SCALAR FUNCTION''
WHEN SYS_OBJ.TYPE = ''TF''
THEN ''TABLE-VALUED FUNCTION''
WHEN SYS_OBJ.TYPE = ''IF''
THEN ''INLINE TABLE-VALUED FUNCTION''
WHEN SYS_OBJ.TYPE = ''V''
THEN ''VIEW''
END [OBJECT_TYPE]
FROM SYS.SQL_MODULES SYS_MOD
INNER JOIN SYS.OBJECTS SYS_OBJ ON SYS_OBJ.OBJECT_ID = SYS_MOD.OBJECT_ID
WHERE SYS_MOD.DEFINITION LIKE ''%'+@SearchString+'%''' +
CASE
WHEN ISNULL(@SearchObjectList, '') <> ''
THEN ' AND SYS_OBJ.TYPE IN('+@SearchObjectList+') '
ELSE '' END +
' ORDER BY SYS_OBJ.TYPE '
END
IF(ISNULL(@SearchString, '') = '')
BEGIN
PRINT 'Error : Incorrect Syntax...!!! '
PRINT ' '
PRINT '-----------------------------------'
PRINT 'Procedure Can take two arguments '
PRINT '-----------------------------------'
PRINT '[1] Search String : string to search in object defination (Required)'
PRINT ' Syntax : EXEC [SearchFromObjects] ''<<String to search>>'''
PRINT ' For Example : EXEC [SearchFromObjects] ''Welcome to'''
PRINT '[2] Search Object type : list of object type in which user want to search (Optional)'
PRINT ' Syntax : EXEC [SearchFromObjects] ''<<String to search>>'', ''<<List of object type seperated by comma>>'''
PRINT ' For Example : EXEC [SearchFromObjects] ''Welcome to'', ''P,TR,FN,TF,IF,V'''
PRINT ' '
PRINT 'List of allowed object types'
PRINT '---------------------------------------'
PRINT ' TYPE DESCRIPTION '
PRINT '---------------------------------------'
PRINT ' P PROCEDURE '
PRINT ' TR TRIGGER '
PRINT ' FN SCALAR FUNCTION '
PRINT ' TF TABLE-VALUED FUNCTION '
PRINT ' IF INLINE TABLE-VALUED FUNCTION '
PRINT ' V VIEW '
PRINT '---------------------------------------'
END
ELSE
BEGIN
EXECUTE(@sqlQuery)
END
SET NOCOUNT OFF
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
END
GO
只需传递两个参数 1) 字符串 ('Welcome to') 和 2) 对象类型('P' 过程)然后您将获得包含您的搜索字符串的存储过程名称
EXEC [SearchFromObjects] 'Welcome to', 'P'
您可以不带任何参数执行 [SearchFromObjects] 以获得更多帮助