Reputation: 145
Is there any way to get all parameter values from a stored procedure dynamically?
In other words, iterate through all parameters in one stored procedure to get their values into one string. This is for a unified logging process for a bunch of stored procedures.
I can get the names of parameters:
SELECT PARAMETER_NAME
FROM INFORMATION_SCHEMA.PARAMETER
WHERE SPECIFIC_NAME = 'procedure_name';
Also, I tried to use dynamic SQL commands. I've generated a command with included parameter, but EXEC can't execute command.
@cmd = 'SELECT '@UserID' + CONVERT(NVARCHAR(MAX), @UserID)
+ '@Date' + CONVERT(NVARCHAR(MAX), @Date)'
EXEC @cmd
Is there any way to do this besides manually generating a list of parameter values for each stored procedure?
Upvotes: 3
Views: 2964
Reputation: 11486
Since SQL Server 2014 there is sys.dm_exec_input_buffer
a table valued function with an output column event_info
that gives the full execution statement (including parameters).
I use this for error logging in stored procedures.
For example:
--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
Upvotes: 3