我是一名新开发人员,试图为旧项目添加新功能。我试图实现的新代码涉及数据库表,所以我正在寻找被调用来更新或最初填充表的过程。
但是有超过50个程序。
如果没有手动打开每个程序并使用CTRL + F搜索我正在寻找的术语,是否有更简单的方法来扫描搜索术语的存储过程?
答案 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。