来自查询的动态命名变量

问题描述 投票:0回答:1

我想编写一个包含以下内容的 SQL Server 存储过程:

想象一下这样的查询:

SELECT VARNAME, TYPE, VARVALUE, LEN(CAST(VARVALUE AS VARCHAR(5))) + 1 AS LENGTH
FROM SOMETABLE;

进一步想象它返回类似以下内容:

变量名称 类型 变量值 长度
红色 INT 42 3
绿色 VARCHAR 6
紫色 字符 5 2

使用这些数据,我想最终得到一组与此等效的声明变量:

DECLARE 
    @RED INT = 42,
    @GREEN VARCHAR(6) = 28,
    @PURPLE CHAR(2) = 5 `

以便我稍后可以在存储过程中执行类似的操作:

PRINT @RED
PRINT @GREEN
PRINT @PURPLE

MYVAR = @PURPLE + ' LBS OF ' + @GREEN + ' YIELDS ' + @RED + ' SQ INCHES OF PLANTS'

我尝试了很多事情,比如执行动态 SQL,比如编写我要执行的

DECLARE
语句形式的查询输出,但没有一个起作用,因为即使变量确实被创建了(我有不知道他们是否真的这样做了),我以后无法在代码中使用它们,因为它们在我编译存储过程时没有声明,这使得编译失败。

我陷入了经典的第 22 条军规,对于如何实现这一点我没有更多的想法。

可能吗?你能告诉我怎么做吗?

您可能对我为什么想要这个感兴趣,并且您可能想告诉我这是一个坏主意。我的目的太长,无法描述,相信我,如果它有效的话,这将是一个好主意,所以我想避开这些讨论。 我几乎说服自己这是不可能的,但我想在完全放弃之前我应该问一下。

提前致谢。

sql-server t-sql dynamic-sql
1个回答
0
投票

给你:

DECLARE @RED INT = (select cast(varvalue as int) from sometable where varname = 'RED');

等等。 我想你可以动态生成该代码。如果您在动态批处理中生成此变量,则必须在动态批处理中包含引用该变量的所有下游代码。

© www.soinside.com 2019 - 2024. All rights reserved.