2017-10-18 110 views
0

此嵌套while循环只能成功执行最低级别的循环。它拒绝给@wKey添加1,即使我告诉它SET @wKey = @wKey + 1 ....我在这里做错了什么? SQL不允许嵌套循环吗?这个SQL WHILE LOOP有什么问题?

DECLARE @fMinKey INT; 
DECLARE @fMaxKey INT; 
DECLARE @wMaxKey INT; 
DECLARE @wKey INT; 
DECLARE @wDate date; 
DECLARE @fcStart DATE; 

SET @fMinKey = (select min([fcKey]) from dbo.fact_Fc); 

SET @fMaxKey = (select max([fcKey]) from dw.fact_Fc); 

SET @wMaxKey = (select max([WellKey]) from dw.fact_Fc); 

SET @wKey = 1; 

SET @wDate = 
(select min([fapDate]) from dbo.dim_W where [Key] = @wKey); 


SET @fcStart = 
(select min([Date]) from dw.fact_Fc where [wKey] = @wKey); 


WHILE (@fMinKey <= @fMaxKey) 
BEGIN 

    WHILE (@wKey <= @wMaxKey) 
    BEGIN 
      WHILE (@wDate < @fcStart) 
      BEGIN 
       INSERT INTO dw.fact_FcTemp2 ([wKey], [Date], [pAmount], [fcKey], [AddedDate]) 
       VALUES (@wKey, @wDate, 0, @fMinKey, CURRENT_TIMESTAMP) 
       SET @wDate = dateadd(DAY, 1, @wDate) 
      END 
      SET @wKey = @wKey + 1 

    END 

    SET @fMinKey = @fMinKey + 1 
END 

所得表仅表示[WKEY] = 1,但它应当具有多个不同wKeys

+0

,因为它是嵌套的。 SET在第一个WHILE循环结束之后。换句话说,在第一个WHILE循环完成之后,我想更改@wKey并重新启动原始循环。 – james5

回答

1

一旦当@wDate达到@fcStart看起来你从不复位@wDate到初始状态 行因此,下一个循环再次运行

你需要一些如何重置@wDate为下一个循环

而且具有3个循环或许是设计的思念,SQL性能不喜欢循环的。 你可以告诉我们数据结构和需要的结果也许tehe是建立sql的原因whitout 3嵌套循环