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)
您将无法按照您正在尝试的方式完成您所要求的事情。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)
| 归档时间: |
|
| 查看次数: |
4727 次 |
| 最近记录: |