簡體   English   中英

動態獲取存儲過程中的所有參數值

[英]Dynamically get all parameter values in stored procedure

有沒有辦法動態地從存儲過程中獲取所有參數值?

換句話說,在一個存儲過程中遍歷所有參數,以將它們的值放入一個字符串中。 這是用於一堆存儲過程的統一日志記錄過程。

我可以得到參數的名稱:

SELECT PARAMETER_NAME 
FROM INFORMATION_SCHEMA.PARAMETER
WHERE SPECIFIC_NAME = 'procedure_name';

另外,我嘗試使用動態SQL命令。 我生成了包含參數的命令,但是EXEC無法執行命令。

@cmd = 'SELECT '@UserID' + CONVERT(NVARCHAR(MAX), @UserID) 
             + '@Date' + CONVERT(NVARCHAR(MAX), @Date)'
EXEC @cmd

除了手動為每個存儲過程生成參數值列表之外,還有什么方法可以這樣做?

從SQL Server 2014開始, sys.dm_exec_input_buffer是一個表值函數,其輸出列event_info提供完整的執行語句(包括參數)。

我用它來記錄存儲過程中的錯誤。

例如:

--include this inside the stored procedure
declare @statement nvarchar(max)
select  @statement = event_info 
from    sys.dm_exec_input_buffer(@@spid, current_request_id())

--this will print whatever you called the procedure with (including parameters)
print @statement

-- if you want to parse just the parameters from the statement, it can be done like this
declare @proc_name varchar(128) = object_name(@@procid)
declare @param_idx int = charindex(@proc_name, @statement) + len(@proc_name)
declare @param_len int = len(@statement) - @param_idx 
declare @params nvarchar(max) = right(@statement, @param_len)

select  @params

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM