我实际上在我的数据库中有100个SP。我必须找到一组10个SP,其中有一个特别的评论。有没有任何搜索查询。
答案 0 :(得分:3)
发现this文章,如果您使用的是SQL Server
,它会完全解决您的问题我肯定会保留此代码的副本供我自己使用:)
此外,它不仅适用于评论,但它似乎适用于SP中的所有文本。
修改强>
为了简单起见,我已经包含了代码的副本,但所有功劳都归Les Smith所有。
CREATE PROCEDURE Find_Text_In_SP
@StringToSearch varchar(100)
AS
SET @StringToSearch = '%' +@StringToSearch + '%'
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND SC.Text LIKE @stringtosearch
ORDER BY SO.Name
GO
答案 1 :(得分:2)
请注意,如果字符串搜索跨越syscomments中记录的边界,则syscomments搜索方法将失败。
要100%我想你必须从数据库中编写Sprocs脚本
建议考虑将每个Sproc存储在一个单独的文件中(并存储在版本控制存储库等中),而不是仅仅在数据库中原位更改它们 - 然后您可以使用自己喜欢的编辑器执行“查找”(和如果合适,“替换”)
答案 2 :(得分:1)
选择OBJECT_NAME(id),*来自syscomments WHERE text LIKE'WhateverYouAreSearchingFor'
答案 3 :(得分:1)
我不确定这是否是最佳解决方案,但以下情况应该有效(尽管可能很慢):
答案 4 :(得分:1)
在另一个SO问题中找到了这个问题,将信用转到最初的回答者gbn
SELECT
OBJECT_NAME(object_id)
FROM
sys.sql_modules
WHERE
definition LIKE '%' + 'WhatIWant' + '%'
适用于长度超过4k的物体
答案 5 :(得分:0)
我不记得确切的表名,但它会是这样的。试一试。
SELECT sysobjects.name
FROM syscomments, sysobjects
WHERE syscomments.id=sysobjects.id
WHERE syscomments.TEXT LIKE ‘%particular comment%’
答案 6 :(得分:0)
您可以使用information_schema:
select *
from information_schema.routines
where routine_definition like '%your comment to find%'
请记住,这只能查看前4096个字符(我相信......) - 要搜索更多字符,您必须直接查询底层系统表。看一下information_schema.routines视图的定义,看看它正在查询哪些系统表
编辑:@ Rich的答案是您需要查询超过4096个字符所需的答案