繁体   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