如何在正在执行的存储过程中获取所有参数名称及其值

时间:2012-07-10 08:38:45

标签: stored-procedures parameters sql-server-2012

我正在使用SQL Server 2012,有没有办法获取存储过程的所有参数以及传递给它的值?

我需要这些东西来构建一个xml。我的意思是这应该在正在执行的程序中发生,它应该适用于所有程序。

例如,让我们假设我们必须执行程序,

  1. uspSave, @name='test' @age=20
  2. uspDelete @id=2
  3. 现在在uspSave程序中,我需要获取@name, @age和值'test',20 在uspDelete中,我应该获得值{2}的@id

    为了获取列名,我尝试了这个,

    select parameter_name 
    from information_schema.PARAMETERS 
    where specific_name = OBJECT_NAME(@@procid)
    

    现在可以遍历上面的查询结果,我们可以得到值。

1 个答案:

答案 0 :(得分:0)

我认为最好的办法是使用一些代码生成来生成所需的代码块。

  • 创建您的sproc而不使用XML-ify参数的代码
  • 使用INFORMATION_SCHEMA.PARAMETERS
  • 敲出快速脚本(可以在TSQL中完成),然后构造特定于sproc的TSQL块,将参数转换为XML
  • 将自动生成的脚本复制到您的sproc中

您使用动态sql的方式因为范围而无法工作 - 在动态生成的SQL中无法访问参数,您需要通过sp_executesql将它们作为args传递,这会让您重新进入广场1。

e.g。

DECLARE @someval int = 7
EXECUTE('SELECT @someval') -- @someval is not in scope

所以,如果它有助于节省时间,那么代码gen看起来是你最好的选择。