Sql 如何查找包含给定字符串的存储过程

Sql 如何查找包含给定字符串的存储过程,sql,sql-server,ssms,Sql,Sql Server,Ssms,我在数据库中创建了许多存储过程。 但我需要搜索定义中包含“欢迎使用”的存储过程。 我可以通过sp_helptext检查每个存储过程 我有许多存储过程,因此无法使用sp_帮助检查每个存储过程,因为它很耗时 如果您能使用请提供帮助 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%welcome to%' AND ROUTINE_TYPE = 'PROCEDURE' 或者使用 S

我在数据库中创建了许多存储过程。 但我需要搜索定义中包含“欢迎使用”的存储过程。 我可以通过sp_helptext检查每个存储过程 我有许多存储过程,因此无法使用sp_帮助检查每个存储过程,因为它很耗时

如果您能使用

请提供帮助

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\u模块
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

您可以执行[SearchFromObjects],无需任何参数即可获得更多帮助

感谢此解决方案:)DownVoter您可以发表评论您可以传递更多类型的对象,如触发器,根据需要运行我已经测试过它,它对我搜索任何对象的文本非常有用。再次感谢,非常好的工作:)你能告诉我这些视图存储在哪里吗?它可以在每个数据库下的视图>>系统视图中找到:)谢谢:)
EXEC [SearchFromObjects] 'Welcome to', 'P'