2015-09-24 154 views
0

我正在使用SQL Server並嘗試構建一個嵌套遊標。 (我知道遊標並不是最好的辦法,但我不能提出任何其他解決方案)。嵌套遊標TSQL(SQL Server)

因此,第一個遊標正在經歷一個臨時Table ## Flanschbreite,將一個FlanschMin捕獲到一個變量中。它工作正常。但內部光標應該通過將FlanschMin捕獲到變量@ FL2來實現。我想創建一個臨時表,它組合了這兩個變量的所有可能組合。外部遊標工作正常,但內部遊標不經過臨時表,它只是返回第一個條目。我認爲@@ FetchStatus存在問題。

有什麼明顯的我做錯了嗎? (對不起我的英語不好,我可不是爲母語的人)

DECLARE curFL1 CURSOR FOR 
    SELECT FlanschMin FROM ##FlanschBreite; 
    OPEN curFL1 

    FETCH next FROM curFL1 INTO @FL1        
    WHILE @@Fetch_Status = 0 

    BEGIN 

     SELECT FlanschMin FROM ##FlanschBreite; 
     OPEN curFL2 

     FETCH next FROM curFL2 INTO @FL2        
     WHILE @@Fetch_Status = 0 

      BEGIN 
      SET @IDFLansch += 1             
      INSERT INTO ##FlanschZuweisung (IDFZ, FL1, FL2) VALUES (@IDFlansch, @FL1, @FL2) 
      FETCH next FROM curFL2 
      END 
     CLOSE curFL2 
     DEALLOCATE curFL2 

    FETCH next FROM curFL1 INTO @FL1 
    END 
    CLOSE curFL1 
    DEALLOCATE curFL1 

我的結果爲## Flanschzuweisung:

IDFZ\ FL1\ FL2 
1\  6\ 6 
2\  8\ 6  
3\ 10\ 6 
4\  6\ 6 
5\  8\ 6 
... 

什麼,我需要的是:

IDFZ\ FL1\ FL2 
1\  6\ 6 
2\  8\ 6 
3\ 10\ 6 
4\  6\ 8 
5\  8\ 8  
6\ 10\ 8 
7\  6\ 10 

...

+1

大概'CROSS JOIN'會做同樣的。更好地分享輸入數據和期望的輸出。 – lad2025

+1

有一種可能的方式來做你想要的沒有遊標。詢問另一個問題並描述你想要完成的事情。 –

+0

是否有你使用全局臨時表而不是常規臨時表的原因?全球臨時表有許多需要處理的挑戰。 –

回答

1

你在哪裏申報curFL2

但不管怎麼說,這似乎是一個簡單的CROSS JOIN加上ROW_NUMBER:

-- INSERT INTO ##FlanschZuweisung (IDFZ, FL1, FL2) 
SELECT row_number() over (order by t1.FlanschMin, t2. FlanschMin), 
    t1.FlanschMin, t2. FlanschMin 
FROM ##FlanschBreite as t1 CROSS JOIN ##FlanschBreite as t2