【发布时间】:2011-04-04 04:57:32
【问题描述】:
有什么方法可以在 SQL Server Management Studio 存储过程中按名称或部分名称找到? (在活动数据库上下文中)
感谢您的帮助
【问题讨论】:
标签: sql database sql-server-2005 ssms
有什么方法可以在 SQL Server Management Studio 存储过程中按名称或部分名称找到? (在活动数据库上下文中)
感谢您的帮助
【问题讨论】:
标签: sql database sql-server-2005 ssms
你可以使用:
select *
from
sys.procedures
where
name like '%name_of_proc%'
如果您需要代码,可以查看 syscmets 表
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%'
【讨论】:
inner join sys.procedures p on p.object_id = c.id
object_definition(object_id(r.ROUTINE_NAME)), 作为替代方案,这是一个问题。
假设您在显示存储过程列表的对象资源管理器详细信息 (F7) 中,单击过滤器按钮并输入名称(或部分名称)。
【讨论】:
这也适用于表和视图(除其他外),而不仅仅是存储过程:
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
它还为您提供了架构名称,该名称在任何重要的数据库中都很有用(例如,您需要查询以按名称查找存储过程的数据库)。
【讨论】:
你可以使用这个查询:
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')
如您所见,您也可以在存储过程的主体内进行搜索。
【讨论】:
对于 SQL Server 9.0 (2005) 版,您可以使用以下代码:
select *
from
syscomments c
inner join sys.procedures p on p.object_id = c.id
where
p.name like '%usp_ConnectionsCount%';
【讨论】:
当我有一个存储过程名称,并且不知道它属于哪个数据库时,我使用以下 -
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
【讨论】:
非常巧妙的技巧我偶然发现了一些 SQL 注入,在搜索框中的对象资源管理器中只需使用您的百分比字符,这将搜索所有存储过程、函数、视图、表、模式、索引......我厌倦了想更多:)
【讨论】: