我试图在存储过程中设置名称为动态的变量:
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/