SQL 2005 - 搜索文本的存储过程(并非所有文本都被搜索)

时间:2009-08-02 01:13:52

标签: sql sql-server sql-server-2005 sql-server-2008 stored-procedures

以下代码似乎没有搜索整个例程定义。

代码块1:

select top 50 * from information_schema.routines
where routine_definition like '%09/01/2008%' and specific_Name like '%NET'

代码块2:

SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%EffectiveDate%' AND ROUTINE_TYPE='PROCEDURE' and ROUTINE_NAME like '%NET'

我知道在大多数情况下这些SQL都可以工作。问题是这样的:当我为“EffectiveDate”运行它时,它在一些存储过程中被埋在~800行,这些存储过程从未出现在结果中。就像“喜欢”只搜索如此深刻。

有关解决此问题的任何提示吗?

我想在ENTIRE存储过程中搜索指定的文本。

谢谢!

4 个答案:

答案 0 :(得分:10)

select * 
FROM   INFORMATION_SCHEMA.ROUTINES 
WHERE  OBJECTPROPERTY(OBJECT_ID(SPECIFIC_NAME),'IsMSShipped') =0 
       and OBJECT_DEFINITION(OBJECT_ID(SPECIFIC_NAME)) like '%EffectiveDate%' 
       AND ROUTINE_TYPE='PROCEDURE'
       AND ROUTINE_NAME like '%NET'

改为使用对象定义。

答案 1 :(得分:8)

只是澄清为什么procedure text is truncated

  

ROUTINE_DEFINITION nvarchar(4000)

     

返回前4000个字符   函数的定义文本或   存储过程如果函数或   存储过程未加密。   否则,返回NULL。

     

确保您获得完整   定义,查询   OBJECT_DEFINITION功能或   中的定义列   sys.sql_modules目录视图。

答案 2 :(得分:2)

如果您正在寻找针对SQL Server数据库的搜索功能,那么这是不同的方法。基本上是RedGate免费提供的搜索工具。

Free 'Search' from Redgate

答案 3 :(得分:0)

非常快,生活和方便 直接链接 http://www.red-gate.com/products/SQL_Search/index.htm