Sql server 获取当前Sp参数和值-(反射相似)?
假设我有一个简单的SP:Sql server 获取当前Sp参数和值-(反射相似)?,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,假设我有一个简单的SP: CREATE PROCEDURE mySp @a int, @b int AS BEGIN ... ... select ________ END 现在让我们假设我通过以下方式执行它: exec mySp 1,2 问题: 是否有任何代码可以放在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu中,以便显示: "you sent param named a with value 1" "you s
CREATE PROCEDURE mySp
@a int,
@b int
AS
BEGIN
...
...
select ________
END
现在让我们假设我通过以下方式执行它:
exec mySp 1,2
问题:
是否有任何代码可以放在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
中,以便显示:
"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...)
(它必须在运行时读取其上下文参数和值)
可能吗?我认为不可能干净利落地做这件事。一种非常糟糕的方法是传入一个额外的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'
创建过程mySp
@整数,
@b INT,
@c varchar(最大值)
作为
开始
声明@names varchar(MAX)=“”
选择@names+=name+','
从sys.parameters
其中对象\u id=@@PROCID和名称'@c'
按参数排序\u id
选择“为'+@names+'传入的值为'+@c
结束
去
执行官mySp 1,1,“1,1”
@RoyiNamir,您正在寻找SQL Server Profiler吗?这是一个可以跟踪远程服务器上运行的所有SP参数的工具。