【问题标题】:get variable name passing the value to a stored procedure获取将值传递给存储过程的变量名
【发布时间】:2020-12-24 06:16:29
【问题描述】:

有没有办法获取用于将值传递给存储过程的参数名称

在下面的示例中,我希望能够在 proc dbo.usp_variableTest 中获取参数名称 @Total

这是一个测试过程,提供了一个名为@Var1 的变量如何接收值的示例

create procedure dbo.usp_variableTest (@var1 varchar)
as
.....



When i execute the below statement i am using a variable named @Total to pass a value to into @Var1

Declare @Total int
Select @Total=1
exec dbo.usp_variableTest @Var1=@Total

我可以获取传递给@Var1 的变量的名称/数据类型吗?在这种情况下,它是@Total,数据类型是一个整数

这样做的目的是集成一种非常简单的方法来记录被传入用于记录的变量的详细信息。

例如,今天我必须像这样为每个变量编写一个插入语句

插入到 tlog 选择'变量:'+cast(@Total as varchar) ETC 等等

我想创建一个可以接受许多可选变量并自动为我记录它们的过程,使用数据类型在需要的地方进行大小写和合并

执行 usp_LogVariables @Total、@id、@product、@brand

然后我可以在一行代码中记录许多变量

【问题讨论】:

  • 为什么变量名在 SP 内部很重要?它将超出其内部范围。过程中的SELECT @Total; 将给出错误'必须声明标量变量“@Total”',即使 if 是用于 @ 值的变量的名称987654325@。您在这里试图解决的真正问题是什么?
  • 如果传递的值是文字?当从应用程序调用时,数据库引擎如何知道应用程序代码以及它如何尝试执行过程?看起来像个大号XY problem
  • 我投票结束这个问题,因为不清楚什么是真正被问到。提出的问题没有任何意义,因为在过程之外使用的变量不在过程范围内,甚至可能不使用变量。这需要更多关于真正被问到的信息,因为这显然是XY Problem
  • 请重新开放审核
  • 答案是否定的:)

标签: sql-server tsql


【解决方案1】:

对我来说也没有多大意义。
不过,这里有一个可能的解决方案,可以完成您所寻求的。
将 Proc 声明更改为:

create procedure dbo.usp_variableTest (@varValue varchar, @varName varchar, @varDataType int )
as

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多