搜索SQL过程的简便方法?

时间:2010-07-15 14:28:28

标签: sql-server-2008 search stored-procedures

我是一名新开发人员,试图为旧项目添加新功能。我试图实现的新代码涉及数据库表,所以我正在寻找被调用来更新或最初填充表的过程。

但是有超过50个程序。

如果没有手动打开每个程序并使用CTRL + F搜索我正在寻找的术语,是否有更简单的方法来扫描搜索术语的存储过程?

5 个答案:

答案 0 :(得分:3)

如果您使用SQL Server Management Studio,您可以右键单击该表并选择“显示依赖关系”(我的管理工作室是德语...我不知道它是否完全被称为“显示依赖关系”英文)。

将弹出一个屏幕,您可以在其中查看与此表格相关的所有对象 如果列出了存储过程,则表示它们使用此表。

答案 1 :(得分:1)

您可以使用sys.syscomments视图阅读文字。

SELECT Distinct SO.Name, sc.text, so.type
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SC.Text LIKE '%your_string%'
ORDER BY SO.Name

答案 2 :(得分:1)

试试这个:

SELECT OBJECT_NAME(id) 
    FROM syscomments 
    WHERE [text] LIKE '%foobar%' 
    AND OBJECTPROPERTY(id, 'IsProcedure') = 1 
    GROUP BY OBJECT_NAME(id)

这只搜索Stored Procs,其他方法似乎没有这样做。

根据MSDN syscomments ...

  

包含每个视图,规则的条目,   default,trigger,CHECK约束,   DEFAULT约束,并存储   数据库中的程序。

因此,如果您没有指定只想搜索存储过程,那么您将获得许多您不感兴趣的其他内容。

答案 3 :(得分:1)

create procedure [dbo].[uspUtilitySearchText]
(
    @txt varchar(2048)
)
AS
SET NOCOUNT ON

declare @srch varchar(3000)

set @srch = '%' + @txt + '%'

SELECT 
    o.type_desc AS ROUTINE_TYPE,
    o.[name] AS ROUTINE_NAME,
    m.definition AS ROUTINE_DEFINITION
FROM sys.sql_modules AS m
    INNER JOIN sys.objects AS o
        ON m.object_id = o.object_id
WHERE m.definition LIKE @srch

然后

exec uspUtilitySearchText 'tablename'

这将搜索给定文本的所有数据库对象

答案 4 :(得分:1)

Select * from syscomments where [text] like '%table_name%'

或者使用可以编写数据库中所有非数据对象的程序,然后使用Grep Them。