在给定数据库的所有存储过程中搜索关键字?

时间:2009-09-01 21:01:04

标签: sql sql-server-2005

如何在给定数据库的所有存储过程中全局搜索关键字?

我使用了以下内容,但我无法获得理想的结果......

SELECT name 
FROM sysobjects 
WHERE id IN 
  ( 
    SELECT id 
    FROM syscolumns 
    WHERE name = 'loadStatus' COLLATE SQL_Latin1_General_CP1_CI_AS 
  ) 

SELECT name 
FROM sysobjects 
WHERE id IN 
  ( 
    SELECT id 
    FROM syscolumns 
    WHERE name like '%loadStatus%' COLLATE SQL_Latin1_General_CP1_CI_AS
  )

此致 -VAS

2 个答案:

答案 0 :(得分:3)

只有sys.sql_modules包含该过程的完整定义。像INFORMATION_SCHEMA.ROUTINES这样的其他视图包含截断的定义。

select object_name(o.object_id), m.*
from sys.sql_modules m
join sys.objects o on m.object_id = o.object_id
where o.type= 'P'
and m.definition like N'%<keyword>%'

答案 1 :(得分:2)

请查看此链接 - http://www.sqlservercentral.com/scripts/T-SQL+Aids/31131/,看看是否有帮助。

链接文章中的SP由Prasad Bhogadi撰写,如下:

CREATE PROCEDURE SEARCHFORSTRING @SEARCHSTRING VARCHAR(100)
AS
            SELECT  DISTINCT(sysobjects.name)
                FROM 
                sysobjects,syscomments
            WHERE 
                sysobjects.id =     syscomments.id
            AND 
                sysobjects.type = 'P'
            AND 
                sysobjects.category=0
AND
        CHARINDEX(@SEARCHSTRING ,syscomments.text)>0

您可以使用它在数据库中创建SP或将其调整为一次性查询。