0

我正在使用 SQL Server 2012,是否有任何可能的方法来获取存储过程的所有参数以及传递给它的值?

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

例如,让我们假设我们有程序,

  1. uspSave, @name='test' @age=20
  2. uspDelete @id=2

现在在uspSave程序中,我需要得到@name, @age值'test',20和in uspDelete,我应该得到@id值2。

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

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

现在是否可以遍历上述查询的结果并且我们可以获得值。

4

1 回答 1

0

我认为你最好的选择是使用一些代码生成来生成你需要的代码块。

IE

  • 在没有代码的情况下创建您的 sproc 以 XML 化参数
  • 敲出一个快速脚本(可以在 TSQL 中完成),然后使用 INFORMATION_SCHEMA.PARAMETERS 构造 TSQL 的 sproc 特定块以将参数转换为 XML
  • 将那段自动生成的脚本复制到您的存储过程中

由于范围的原因,您使用动态 sql 的思考方式不起作用 - 在动态生成的 SQL 中无法访问参数,您需要通过 sp_executesql 将它们作为 args 传递,这会让您回到第 1 格。

例如

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

因此,如果它有助于节省时间,那么代码生成看起来是您最好的选择。

于 2012-07-10T11:57:04.667 回答