Sql server 2008 搜索SQL过程的简单方法?

Sql server 2008 搜索SQL过程的简单方法?,sql-server-2008,search,stored-procedures,Sql Server 2008,Search,Stored Procedures,我是一名新开发人员,试图在旧项目中添加新功能。我试图实现的新代码涉及数据库表,因此我正在寻找被调用以更新或最初填充表的过程 但是有50多个程序 除了手动打开每个过程并使用CTRL+F搜索我要查找的术语外,还有更简单的方法来扫描存储过程以查找搜索术语吗?您可以使用sys.syscomments视图来阅读文本 SELECT Distinct SO.Name, sc.text, so.type FROM sysobjects SO (NOLOCK) INNER JOIN syscomments SC

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

但是有50多个程序


除了手动打开每个过程并使用CTRL+F搜索我要查找的术语外,还有更简单的方法来扫描存储过程以查找搜索术语吗?

您可以使用
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

您可以使用
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

如果使用SQLServerManagementStudio,可以右键单击该表并选择“显示依赖项”(我的ManagementStudio是德语…我不知道它在英语中是否确切地称为“显示依赖项”)

将弹出一个屏幕,您可以在其中查看此表中依赖的所有对象。

如果列出了存储过程,则表示它们使用此表。

如果使用SQL Server Management Studio,则可以右键单击该表并选择“显示依赖项”(我的Management Studio是德语…我不知道它在英语中是否确切称为“显示依赖项”)

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

请尝试以下操作:

SELECT OBJECT_NAME(id) 
    FROM syscomments 
    WHERE [text] LIKE '%foobar%' 
    AND OBJECTPROPERTY(id, 'IsProcedure') = 1 
    GROUP BY OBJECT_NAME(id)
这只是对存储过程的搜索,而发布的其他方法似乎没有这样做

根据MSDN系统评论

包含每个视图、规则、, 默认、触发器、检查约束、, 默认约束,并存储 数据库中的过程

因此,如果您不指定只希望搜索存储的进程,您将获得许多其他您不感兴趣的内容。

尝试以下方法:

SELECT OBJECT_NAME(id) 
    FROM syscomments 
    WHERE [text] LIKE '%foobar%' 
    AND OBJECTPROPERTY(id, 'IsProcedure') = 1 
    GROUP BY OBJECT_NAME(id)
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
这只是对存储过程的搜索,而发布的其他方法似乎没有这样做

根据MSDN系统评论

包含每个视图、规则、, 默认、触发器、检查约束、, 默认约束,并存储 数据库中的过程

因此,如果您不指定您只想搜索存储的进程,您将得到许多其他您不感兴趣的东西

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
然后

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

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

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

Select * from syscomments where [text] like '%table_name%'
或者使用一个程序,可以从数据库中为所有非数据对象编写脚本,然后对它们进行Grep

或者使用一个程序,该程序可以为数据库中的所有非数据对象编写脚本,然后对它们进行Grep处理。

称为“查看依赖项”。Vielen Dank!将在8分钟内接受您的回答。称为“查看依赖项”。Vielen Dank!我会在8分钟内接受你的回答。