【问题标题】:SQL 2005 - Search stored procedures for text (Not all text is being searched)SQL 2005 - 在存储过程中搜索文本(并非所有文本都在搜索中)
【发布时间】:2009-08-02 01:13:51
【问题描述】:

以下代码似乎并未搜索整个例程定义。

代码块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 行,这些存储过程永远不会出现在结果中。好像“喜欢”只搜索这么深。

有解决此问题的提示吗?

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

谢谢!

【问题讨论】:

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


    【解决方案1】:
    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'
    

    改用对象定义。

    【讨论】:

    • 谢谢马斯特罗斯。 *OBJECTPROPERTY(OBJECT_ID(SPECIFIC_NAME),'IsMSShipped') =0 * 是什么意思?
    • 顺便问一下,知道上面的失败原因吗?
    • 不知道,但 SQL 2000 也有同样的问题,有两种方法可以检索存储过程的文本,而一种总是被截断。
    【解决方案2】:

    只是为了澄清为什么procedure text is truncated

    ROUTINE_DEFINITION nvarchar(4000)

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

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

    【讨论】:

      【解决方案3】:

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

      Free 'Search' from Redgate

      【讨论】:

        【解决方案4】:

        非常快速、生动、方便 直接链接 http://www.red-gate.com/products/SQL_Search/index.htm

        【讨论】:

          猜你喜欢
          • 2013-01-20
          • 2011-06-29
          • 1970-01-01
          • 2012-05-21
          • 2015-03-11
          • 1970-01-01
          • 2012-02-22
          • 2013-08-05
          • 1970-01-01
          相关资源
          最近更新 更多