【问题标题】:nested Cursor TSQL (SQL Server)嵌套游标 TSQL (SQL Server)
【发布时间】:2015-10-01 01:45:16
【问题描述】:

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

所以第一个光标正在通过一个临时表 ##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

...

【问题讨论】:

  • CROSS JOIN 可能也会这样做。更好地共享输入数据和所需的输出。
  • 可能有一种方法可以在没有光标的情况下做你想做的事。提出另一个问题并描述您想要完成的任务。
  • 您使用全局临时表而不是常规临时表是否有原因?全局临时表有许多挑战需要处理。

标签: sql sql-server cursor nested


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2015-10-09
    • 2019-02-18
    • 2014-04-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多