Sql-Server

如何在儲存過程的全文中搜尋值?

  • April 23, 2016

當我想查找特定值時,我使用以下腳本來搜尋所有儲存過程的文本。

SELECT ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE @searchText
ORDER BY ROUTINE_NAME   

我最近發現它ROUTINE_DEFINITION在 4000 個字元後停止,所以一些程序在應該返回的時候沒有返回。

如何查詢儲存過程的全文以獲取值?

從 BOL,在INFORMATION_SCHEMA.ROUTINES

列名:ROUTINE_DEFINITION

數據類型: nvarchar(4000)

說明: 如果函式或儲存過程未加密,則返回函式或儲存過程定義文本的前 4000 個字元。否則,返回 NULL。為確保您獲得完整的定義,請查詢OBJECT_DEFINITION函式或sys.sql_modules目錄視圖中的定義列。

因此,您可以通過如下更改腳本來查看其餘部分:

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

上面別名為 as 的列FullDefinition將返回其餘內容為nvarchar(max).

引用自:https://dba.stackexchange.com/questions/41765