如何在存储过程的全文中搜索值?

Rac*_*hel 5 sql-server-2005 sql-server stored-procedures information-schema

当我想查找特定值时,我使用以下脚本来搜索所有存储过程的文本。

SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE @searchText
ORDER BY ROUTINE_NAME   
Run Code Online (Sandbox Code Playgroud)

我最近发现ROUTINE_DEFINITION在 4000 个字符后停止,所以一些程序没有在应该返回的时候返回。

如何查询存储过程的全文以获取值?

gbn*_*gbn 7

使用其中之一

从不使用

  • INFORMATION_SCHEMA
  • sys.syscomments


RoK*_*oKa 6

从 BOL 开始INFORMATION_SCHEMA.ROUTINES

列名:ROUTINE_DEFINITION
数据类型: nvarchar(4000)
说明: 如果函数或存储过程未加密,则返回函数或存储过程定义文本的前 4000 个字符。否则,返回 NULL。为确保您获得完整的定义,请在sys.sql_modules目录视图中查询OBJECT_DEFINITION函数或定义列。

因此,您可以通过如下更改脚本来查看其余部分:

SELECT 
    ROUTINE_NAME, 
    ROUTINE_TYPE, 
    ROUTINE_DEFINITION as First4000, 
    OBJECT_DEFINITION(object_id(ROUTINE_NAME)) as FullDefinition
FROM 
    INFORMATION_SCHEMA.ROUTINES
WHERE 
    OBJECT_DEFINITION(object_id(ROUTINE_NAME)) LIKE @searchText
ORDER BY 
    ROUTINE_NAME
Run Code Online (Sandbox Code Playgroud)

上面别名为 as 的列FullDefinition会将其余内容返回为nvarchar(max)