Sql-Server

儲存過程查詢文本是否儲存在任何表中?

  • January 8, 2020

除了需要計劃句柄的 DM_EXEC_SQL_TEXT 函式之外,我在 sys 模式對像中看不到任何東西,但我試圖從中獲取查詢文本的過程目前沒有執行。(也許有辦法通過他們的記憶體計劃?……雖然我正在尋找的那些可能沒有記憶體計劃。)

儲存過程的查詢文本是否儲存在任何可查詢的地方?

我看到 sp_helptext 可能是一個選項:https ://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/view-the-definition-of-a-stored-procedure?view=sql- server-ver15#TsqlProcedure

有幾種方法可以獲得需要不同的輸入資訊

INFORMATION_SCHEMA

您只需要知道要為其定義的對象的名稱。

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'MyProcName'

請注意,此模式是特定於數據庫的,因此您需要在存在該過程的數據庫上下文中,此查詢才能返回正確的數據。另請注意,它僅返回過程的前 4000 個字元。

對象定義

您需要知道要查找的過程的 object_id。

SELECT OBJECT_DEFINITION(*object_id*)

也特定於數據庫,但返回對象的完整文本。

sys.sql_modules

您需要知道要查找的過程的 object_id。

SELECT * FROM sys.sql_modules WHERE object_id = *object_id*

也特定於數據庫,但返回對象的完整文本。

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