SQL:动态变量名

标签 sql sql-server tsql sql-server-2005

我试图在存储过程中设置名称为动态的变量:

DECLARE @var01 varchar(50)  
DECLARE @var02 varchar(50) 
...
DECLARE @var30 varchar(50)
DECLARE @sql = varchar(max) 

DECLARE @loopcnter INT      

-- (Inside some loop where the loopcounter increments each iteration)
...
SET @sql = 'SET @var0'+CAST(@loopcntr AS Varchar)+'= '''+'somevalue'+''''
-- e.g.) SET @var01= 'somevale'
EXEC (@sql)

这不起作用,因为变量是在与动态 sql 不同的范围内声明的。

以这种方式动态设置变量的正确方法是什么?

最佳答案

嗯,它并不漂亮,但你可以这样做:

if @loopcntr = 1
    set var01 = 'somevalue'
else if @loopcntr = 2
    set var02 = 'whatever'
else if . . .

这应该足够令人不快,您可能会想到替代方案。哦,这是一个很好的。定义一个表变量并为每个值添加行:

declare @vars table (
    id int identity(1, 1),
    loopcntr int,
    value varchar(255)
);

. . .
-- inside the loop
    insert into @vars(loopcntr, value)
        select @loopcntr, 'whatever';

当你想获取一个变量时,你可以这样做:

declare @var varchar(255);
select @var = value from @vars where loopcntr = <the one I want>;

关于SQL:动态变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772661/

相关文章:

Mysql EAV 将行匹配为字段或实体的属性值

sql-server - 提供的名称无效(机制级别 : KrbException: Cannot locate default realm) in groovy script

tsql - 清除数据库表的 SQL 脚本

sqlite - 从sqlite表中选择唯一记录

javascript - count 函数从 HTML 浏览器数据库返回的计数值不正确

SQL 查询转置数据

sql-server - T-SQL 相当于 Excel "MAX"函数,返回两个数字中较大的一个

sql - 如何在 MERGE INTO 语句中使用 JOIN?

mysql - 获取数据组中的最小最大值

javascript - 在 PHP 脚本中得到正确的结果,但在 console.log() 中得到错误的消息