嵌套Cursor TSQL(SQL Server)

时间:2015-09-24 14:44:03

标签: sql sql-server cursor nested

我正在使用SQL Server并尝试构建嵌套游标。 (我知道游标不是最好的做事方式,但我不能提出任何其他解决方案。)

所以第一个Cursor正在通过临时表## 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 个答案:

答案 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