我有一系列需要迭代的10个变量,例如:
DECLARE @id1 int, @id2 int, @id3 int, @id4 int...@id10 int
现在,每个变量都包含一个我需要迭代的不同值,并将该值添加到另一个变量上。
例如:
SET @Total = @Total + @id1
有没有一种方法我可以做某种for循环或某种东西来迭代并在每次迭代时做这样的事情
SET @Total = @Total + @id + @counter
这就像你可以在编程语言上做的那样
Total = Total + Id[i]
由于
答案 0 :(得分:1)
简短的回答:不,你不能这样做。
推定答案:你想要什么对数组来说是微不足道的。 SQL不支持数组。 (好吧,如果数据存储在表中,那就有点了,但这不是这种情况。)
详细的答案:你可能可以通过将值加载到表中并运行在循环中创建的动态代码来做类似的事情,但这比仅仅将它写成一个丑陋的语句要多得多。
钓鱼回答:如果你真的有N变量你需要处理,将它们插入一个表并以这种方式工作(只有当N很大时才有意义)。我猜这不是这种情况。
答案 1 :(得分:0)
这是可行的,但不是很漂亮,这就是它的外观:
DECLARE @id1 int, @id2 int, @id3 int, @id4 int, @id5 int, @id6 int, @id7 int, @id8 int, @id9 int, @id10 int, @Total int, @BigTotal int
DECLARE @rowcount int
DECLARE @varscount int
DECLARE @varname varchar(10)
--This table will hold your vars and their values:
DECLARE @varstable TABLE (
idx int identity(1,1),
varname varchar(10), varval int )
--set your var values any way you like:
SET @id1 = 10
SET @id2 = 10
SET @id3 = 10
SET @id4 = 10
SET @id5 = 10
SET @id6 = 10
SET @id7 = 10
SET @id8 = 10
SET @id9 = 10
SET @id10 = 10
SET @Total = 100
--dump the values and the varname into the table:
insert into @varstable (varname, varval)
VALUES ('@id1',@id1),
('@id2',@id2),
('@id3',@id3),
('@id4',@id4),
('@id5',@id5),
('@id6',@id6),
('@id7',@id7),
('@id8',@id8),
('@id9',@id9),
('@id10',@id10)
--now loop through the vars and their values:
SET @rowcount = 1
SET @varscount = (SELECT MAX(idx) FROM @varstable)
WHILE(@rowcount < @varscount)
BEGIN
SET @varname = (SELECT varname FROM @varstable WHERE idx = @rowcount)
--here's your action:
SET @Total = @Total + (SELECT varval FROM @varstable WHERE idx = @rowcount)
--a little success message:
PRINT CONCAT(@varname, ' + @total = ',@Total)
SET @rowcount = @rowcount + 1
END
干杯