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
END

我得到的结果是@t=2. 如果我将其替换为@i我得到@i=41. 为什么@variable在第一个while循环中显示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 它从某个表的第 2 列获取 40 行..ect)并将其写入 @sql 字符串,当她达到 40 while循环中断并进入@t循环,@t应该执行@sql字符串(例如它创建一个视图,所以最后我应该有6个视图,但在第一次执行之后@t循环中断。)

4

2 回答 2

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
于 2014-10-21T08:45:26.523 回答
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
于 2014-10-21T08:14:35.773 回答