Sql-Server
如何在儲存過程的全文中搜尋值?
當我想查找特定值時,我使用以下腳本來搜尋所有儲存過程的文本。
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)
.