declare @t INT = 1
declare @i INT = 1
while @t <= 5
BEGIN
while @i <= 40
BEGIN
set @i = @i + 1
END
set @t = @t + 1
select @t
END
我得到的结果是@t=2
。如果我将其替换为@i
,我会获得@i=41
。为什么第一个while循环中的@variable
显示为2,是否会制动?它应该不显示@t=6
吗?
如果我将选择@t
放在最后它将显示6,但是如果您需要迭代的每个结果,如果您将@t
放在后面,那么您将无法得到其他结果结束,你只会得到最后的结果。我希望结果1,2,3,4,5,6全部通过@t
,最终结果只显示6。
这是我编写的过程的简化示例,对于每个@t迭代,@ i进行完整迭代,然后@t应该进行第二次迭代。 @i按计划工作,但@t在第一次尝试后中断。
(如果@t = 1,@ i从某个表中获取第1列中的40行,@ t = 2,它从某个table..ect中获取第2列中的40行)并将其写入@sql字符串,当她当循环中断并进入@t循环时,得到40,@ t应该执行@sql字符串(例如它创建一个视图,所以最后我应该有6个视图,但是在第一次执行@t循环之后。)
答案 0 :(得分:1)
您可以将结果存储在表变量中。
DECLARE @t INT = 1
DECLARE @i INT = 1
DECLARE @Result table(Id int)
while @t <= 5
BEGIN
while @i <= 40
BEGIN
set @i = @i + 1
END
INSERT INTO @Result(Id) values(@t)
set @t = @t + 1
END
select Id FROM @Result
答案 1 :(得分:0)
据我了解,您应该:
DECLARE @t INT = 1
DECLARE @i INT = 1
while @t <= 5
BEGIN
while @i <= 40
BEGIN
set @i = @i + 1
END
set @t = @t + 1
--select @t <-- this is breaking the loop before it ends
END
select @t