在SP搜索

时间:2009-02-17 10:34:19

标签: sql sql-server sql-server-2005

我实际上在我的数据库中有100个SP。我必须找到一组10个SP,其中有一个特别的评论。有没有任何搜索查询。

7 个答案:

答案 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)

我不确定这是否是最佳解决方案,但以下情况应该有效(尽管可能很慢):

  1. 在SQL Server Management Studio中打开数据库。
  2. 在对象资源管理器中,右键单击数据库,任务>生成脚本。
  3. 单击“下一步”按钮3次,直到进入“选择对象类型”步骤。
  4. 检查存储过程并单击“下一步”。
  5. 单击全选以选择所有sp,或者如果您可以以某种方式限制sp,请选择您要搜索的那些。
  6. 单击“完成”,然后再次单击“完成”。
  7. 点击关闭。
  8. 您现在应该已经编写了所有sp的脚本,以便搜索它们。

答案 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个字符所需的答案