从 db2 获取前 n 到 n 行

Getting top n to n rows from db2

我需要将一个巨大的 table 分成几块。

正在从 DB2 中获取数据并在 SSIS 中进行处理

iteration 1 : Get first 10 rows and process it

iteration 2 : Get next 10 rows(11-20) and process it

iteration 3 : Get next 10 rows(21-30) and process it

等等,直到 table

的计数 (*)

是否可以从 db2 中获取前 n 到 n 行

我正在寻找如下查询,

select * from from tablename fetch 10 to 20 rows

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061832.html

db2 "select row_number() over(order by tabschema, tabname)
,    tabschema::char(10), tabname::char(30)
from syscat.tables
order by tabschema, tabname 
offset 10 rows 
fetch first 10 rows only"

1                    2          3                             
-------------------- ---------- ------------------------------
                  11 SYSCAT     COLCHECKS                     
                  12 SYSCAT     COLDIST                       
                  13 SYSCAT     COLGROUPCOLS                  
                  14 SYSCAT     COLGROUPDIST                  
                  15 SYSCAT     COLGROUPDISTCOUNTS            
                  16 SYSCAT     COLGROUPS                     
                  17 SYSCAT     COLIDENTATTRIBUTES            
                  18 SYSCAT     COLLATIONS                    
                  19 SYSCAT     COLOPTIONS                    
                  20 SYSCAT     COLUMNS                       

  10 record(s) selected.

使用 OFFSET x FETCH FIRST y ROWS ONLY 选项按块读取数据

要在 SSIS 中使用此方法,您应该执行以下步骤:

  1. 添加执行SQL任务以获取行数并将其存储到变量中。
  2. 添加一个 Forloop 容器以循环遍历一系列数字,直到达到行数
  3. 在 Forloop 容器内,添加一个包含 OLEDB 源或 ODBC 和 OLEDB 目标的数据流任务
  4. In OLEDB/ODBC Source, Set the Access mode to SQL Command and define an epxression similar to:

    "SELECT * FROM MYTABLE ORDER BY ID_COLUMN
    OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "
    FETCH FIRST " + (DT_WSTR,50)@[User::IncrementValue] + " ROWS ONLY" 
    

以下答案是从 SQLite 分块加载数据的分步指南,您只需更改 SQL 命令语法即可:

参考资料