3

可以说我有这个简单的 SP :

CREATE PROCEDURE mySp
  @a int, 
  @b int
AS
  BEGIN
      ...
      ...
      select ________
  END

现在假设我通过以下方式执行它:

exec mySp 1,2

问题 :

没有我可以放入的代码,______所以它会告诉我:

"you sent param named a with value 1"
"you sent param named b with value 2"

此代码应该是动态的(粘贴在某些 SP 中)。因此我不能这样做:

select "you sent param named a...with value "+cast (@a...)
select "you sent param named b...with value "+cast (@b...)

(它必须在运行时读取其上下文参数和值)

可能吗 ?

4

1 回答 1

2

我认为不可能干净地做到这一点。一种非常肮脏的做法是传入一个额外的 varchar 列,该列是其余参数的逗号分隔列表值。然后您可以获取各个参数的名称并将它们与传入的参数匹配。这是一个示例

CREATE PROCEDURE mySp
  @a int, 
  @b INT,
  @c varchar(MAX)
AS
  BEGIN
  declare @names varchar(MAX) = ''
      SELECT @names += name +','
      FROM sys.parameters
      WHERE object_id = @@PROCID AND name <> '@c'
      ORDER BY parameter_id

      SELECT 'The passed in values for '+@names + ' are ' +@c

  END


go
EXEC mySp 1,1, '1,1'
于 2013-06-20T22:00:14.633 回答