SQL在while循环中连接变量

gre*_*ner 5 sql t-sql sql-server-2008

我有n@BLOCn变量。

是否可以串联一个变量名,以便可以将循环计数器用作变量名的一部分?例如:

DECLARE @BLOC1 int, @i int, @MAX int, @QTY int;

SET @i = 1;
SET @MAX = 1;
SET @BLOC1 = 12;

WHILE @i <= @MAX
BEGIN
   SET @QTY = FLOOR('BLOC'+@i)
   ...
END

SELECT @QTY
Run Code Online (Sandbox Code Playgroud)

到目前为止,我收到此错误:

将varchar值'BLOC'转换为数据类型int时,转换失败。

我基本上是在寻找与Javascript等效的SQL:

var foo = 'var';
var bar = 'Name';
window[foo + bar] = 'hello';
alert(varName);
Run Code Online (Sandbox Code Playgroud)

dan*_*ana 3

您将无法按照您正在尝试的方式完成您所要求的事情。SQL Server有一个可以运行动态SQL的exec()函数和存储过程。sp_executesql但是,它们都创建了另一个用于运行命令的上下文。

如果您愿意使用表变量来保存您的@BLOC值,您可以执行以下操作:

DECLARE @BLOCS table(k int, v int);
DECLARE @i int, @MAX int, @QTY int;

SET @i = 1;
SET @MAX = 1;

insert into @BLOCS values(1, 12)

WHILE @i <= @MAX
BEGIN
   SET @QTY = FLOOR((select v from @BLOCS where k = @i))
   set @i = @i + 1
END

SELECT @QTY
Run Code Online (Sandbox Code Playgroud)