按名称查找存储过程

问题描述 投票:0回答:8

有什么方法可以按名称或部分名称在 SQL Server Management Studio 存储过程中找到? (在活动数据库上下文中)

感谢帮助

sql database sql-server-2005 ssms
8个回答
180
投票

您可以使用:

select * 
from 
   sys.procedures 
where 
   name like '%name_of_proc%'

如果您需要代码,可以查看系统注释表

select text 
from 
    syscomments c
    inner join sys.procedures p on p.object_id = c.object_id
where 
    p.name like '%name_of_proc%'

编辑更新:

你也可以使用ansi标准版

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%'

44
投票

假设您在显示存储过程列表的对象资源管理器详细信息 (F7) 中,单击过滤器按钮并输入名称(或部分名称)。

alt text


6
投票

这也适用于表和视图(除其他外),而不仅仅是存储过程:

SELECT
    '[' + s.name + '].[' + o.Name + ']',
    o.type_desc
FROM
    sys.objects o
    JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE
    o.name = 'CreateAllTheThings' -- if you are certain of the exact name
    OR o.name LIKE '%CreateAllThe%' -- if you are not so certain

它还为您提供了模式名称,这将在任何重要的数据库中都有用(例如,您需要查询以按名称查找存储过程的数据库)。


4
投票

当我有一个 Store Procedure 名称,但不知道它属于哪个数据库时,我使用以下 -

Use [master]
GO

DECLARE @dbname VARCHAR(50)   
DECLARE @statement NVARCHAR(max)

DECLARE db_cursor CURSOR 
LOCAL FAST_FORWARD
FOR  
--Status 48 (mirrored db)
SELECT name FROM MASTER.dbo.sysdatabases WHERE STATUS NOT LIKE 48 AND name NOT IN ('master','model','msdb','tempdb','distribution')  

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @dbname  
WHILE @@FETCH_STATUS = 0  
BEGIN  

SELECT @statement = 'SELECT * FROM ['+@dbname+'].INFORMATION_SCHEMA.ROUTINES  WHERE [ROUTINE_NAME] LIKE ''%name_of_proc%'''+';'
print @statement

EXEC sp_executesql @statement

FETCH NEXT FROM db_cursor INTO @dbname  
END  
CLOSE db_cursor  
DEALLOCATE db_cursor

4
投票

选项 1: 在 SSMS 中转到

View > Object Explorer Details
(或按 F7)。在
Search
框中输入并点击Enter。最后在显示的列表中,右键单击并选择
Synchronize
以在
Object Explorer
树中找到对象。

选项 2: 安装像

dbForge Search
这样的附加组件。然后右键单击显示的列表并选择
Find in Object Explorer
.


3
投票

您可以使用此查询:

SELECT 
    ROUTINE_CATALOG AS DatabaseName ,
    ROUTINE_SCHEMA AS SchemaName,
    SPECIFIC_NAME AS SPName ,
    ROUTINE_DEFINITION AS SPBody ,
    CREATED AS CreatedDate,
    LAST_ALTERED AS LastModificationDate
FROM INFORMATION_SCHEMA.ROUTINES
WHERE 
    (ROUTINE_DEFINITION LIKE '%%')
    AND 
    (ROUTINE_TYPE='PROCEDURE')
    AND
    (SPECIFIC_NAME LIKE '%AssessmentToolDegreeDel')

如您所见,您也可以在存储过程的主体内进行搜索。


3
投票

对于SQL Server version 9.0 (2005),您可以使用以下代码:

select * 
from 
syscomments c
inner join sys.procedures p on p.object_id = c.id
where 
p.name like '%usp_ConnectionsCount%';

0
投票

非常巧妙的技巧我偶然发现了一些 SQL 注入,在搜索框中的对象资源管理器中只需使用你的百分比字符,这将搜索所有存储过程、函数、视图、表、模式、索引......我厌倦了思考更多 :)

Search Pattern

© www.soinside.com 2019 - 2024. All rights reserved.