按名称查找存储过程

gru*_*ber 73 sql database ssms sql-server-2005

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

感谢帮助

Pre*_*gha 127

您可以使用:

select * 
from 
   sys.procedures 
where 
   name like '%name_of_proc%'
Run Code Online (Sandbox Code Playgroud)

如果您需要代码,可以查看syscomments表

select text 
from 
    syscomments c
    inner join sys.procedures p on p.object_id = c.object_id
where 
    p.name like '%name_of_proc%'
Run Code Online (Sandbox Code Playgroud)

编辑更新:

你也可以使用ansi标准版

SELECT * 
FROM 
    INFORMATION_SCHEMA.ROUTINES 
WHERE 
    ROUTINE_NAME LIKE '%name_of_proc%'
Run Code Online (Sandbox Code Playgroud)

  • 如果您想获取带有名称的 sp 文本,使用“sp_helptext SPNAME”会更容易 (2认同)
  • SQL 2012,必须在p.object_id = c.id上执行``内部加入sys.procedures p'' (2认同)
  • 请注意,对于 SQL Server,ANSI 标准版本在 8k 处截断了 ROUTINE_DEFINITION。您可以使用“object_definition(object_id(r.ROUTINE_NAME)),”作为替代方案,这是一个问题。 (2认同)

Cod*_*uth 42

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

替代文字

  • 非常感谢你,我不知道过滤器的东西,我从来没有看过那个按钮. (2认同)

nat*_*ere 5

这也适用于表和视图(以及其他内容),而不仅仅是sprocs:

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
Run Code Online (Sandbox Code Playgroud)

它还为您提供了模式名称,该名称在任何非平凡的数据库中都很有用(例如,您需要查询以按名称查找存储过程的数据库).

  • 将遗留应用程序从 sql 2005 迁移到 2016 我的脚本在“@errorMessage”附近出现了“不正确的语法”,这并不是很有帮助。当我在 SSSM 中运行相同的 sql 时,它添加了“in procedure 'some_name'”,但任何地方都没有这样的存储过程!事实证明这是一个触发器,并且您的查询找到了它。谢谢! (2认同)

小智 5

当我有一个存储过程名称,并且不知道它属于哪个数据库时,我使用以下命令 -

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
Run Code Online (Sandbox Code Playgroud)


Lui*_*dez 5

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

对象资源管理器详细信息

选项 2:安装附加组件,例如dbForge Search. 然后右键单击显示的列表并选择Find in Object Explorer

在此输入图像描述