SQL在while循环中连接变量

我有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

到目前为止,我收到了这个错误:

Conversion failed when converting the varchar value ‘BLOC’ to data
type int.

我基本上是在寻找Javascript的SQL等价物:

var foo = 'var';
var bar = 'Name';
window[foo + bar] = 'hello';
alert(varName);

最佳答案 你将无法按照自己的方式去做. SQL Server有一个exec()函数和一个可以运行动态SQL的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
点赞