【问题标题】:cursor within a cursor?光标内的光标?
【发布时间】:2020-12-18 16:10:00
【问题描述】:

是否可以在游标内定义游标?

我有两个带有列的游标,然后我通过减号语句将它们相减。 但是,在减号语句之后我还需要一个游标,因为我需要迭代列。应将每一列添加到创建视图脚本中,以便创建所有列。

我需要变量“all”的光标。有人有想法吗?它不适用于此代码.. 请不要看“xy”之类的内容。数值尚未调整。它只是一个测试脚本。

这是我的脚本:

DECLARE CURSOR itemsone
FOR 
    SELECT table_name, column_name 
    FROM table1
    WHERE table_name LIKE 'xy'; 
    
DECLARE CURSOR itemstwo
FOR 
    SELECT table_name, column_name 
    FROM table2
    WHERE table_name LIKE 'xy';
    
    
DECLARE test_sql VARCHAR(500);
---
FOR item AS itemone DO
    all = SELECT column_name FROM table1 WHERE table_name = 'xy' AND column_name like 'z'
          MINUS 
          SELECT column_name FROM table2 WHERE table_name = 'xy';

    test_sql= CONCAT(CONCAT('CREATE OR REPLACE VIEW V_', 'TEST'), 'AS ( SELECT');
    
    FOR a AS all DO 
        test_sql = test_sql + CONCAT(a,', ');
    END FOR;

-- MORE TO FOLLOW

【问题讨论】:

    标签: sql sql-server database tsql etl


    【解决方案1】:

    是的,可以根据需要多次嵌套游标。 下面是我嵌套 3 个游标的示例:

    Declare Cursor_1 CURSOR FOR Select (...)
    
    Open Cursor_1 
    Fetch Next From Cursor_1 Into (...)
    While(@@FETCH_STATUS = 0)
    Begin
    
        Declare Cursor_2 CURSOR FOR Select (...)
    
        Open Cursor_2 
        Fetch Next From Cursor_2 Into (...)
        While(@@FETCH_STATUS = 0)
        Begin
            
            Declare Cursor_3 CURSOR FOR Select (...)
    
            Open Cursor_3 
            Fetch Next From Cursor_3 (...)
            While(@@FETCH_STATUS = 0)
            Begin
    
                (...)
                Fetch Next From Cursor_3 Into (...)
    
            End
            Close Cursor_3 
            Deallocate Cursor_3 
    
            Fetch Next From Cursor_2 Into (...)
    
        End
        Close Cursor_2 
        Deallocate Cursor_2 
    
        Fetch Next From Cursor_1 Into (...)
    
    End
    CLOSE Cursor_1  
    DEALLOCATE Cursor_1
    

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多