在DB2中插入数千行

时间:2013-07-19 13:02:32

标签: sql db2

我需要将DB2表中的某一行乘以18000次。某些列值将保留为原始值,而某些列值则需要增加1。

我对DB2知之甚少,我找不到关于如何做到这一点的具体简单答案。有人可以给我一个如何实现这个目标的例子吗?

DB2版本:9.7 / OS:Windows 2k8

例如,我有下表:

T_RES_TABLE
Col1 |Col2|Col3 |Col4|
----------------------
1    |   1|    1|   1|

我需要做的是:

T_RES_TABLE
Col1 |Col2|Col3 |Col4|
----------------------
1    |   1|    1|   1| - original
----------------------
2    |   1|    2|   1|
----------------------
.
.
.
----------------------
18000|   1|18000|   1|

所以Col1和Col3需要增加,其余的必须保持不变。希望它足够清楚。

2 个答案:

答案 0 :(得分:4)

您可以使用递归查询生成新的列值:

    $ db2 "create table t_res_table (col1 int, col2 int, col3 int, col4 int)"
    DB20000I  The SQL command completed successfully.

    $ db2 "insert into t_res_table values (1,1,1,1)"
    DB20000I  The SQL command completed successfully.

    $ db2 "select * from t_res_table"

    COL1        COL2        COL3        COL4       
    ----------- ----------- ----------- -----------
                1           1           1           1

      1 record(s) selected.

    $ db2 "insert into t_res_table \
    >with t (col1, col2, col3, col4, lvl) as ( \
    >select col1, col2, col3, col4, 1  from t_res_table where col1 =1 \
    >union all \
    >select col1+1, col2, col3+1, col4, lvl+1 from t where lvl <18) \
    >select col1, col2, col3, col4 from t where col1 > 1"
    DB20000I  The SQL command completed successfully.

    $ db2 "select * from t_res_table"

    COL1        COL2        COL3        COL4       
    ----------- ----------- ----------- -----------
                1           1           1           1
                2           1           2           1
                3           1           3           1
                4           1           4           1
                5           1           5           1
                6           1           6           1
                7           1           7           1
                8           1           8           1
                9           1           9           1
               10           1          10           1
               11           1          11           1
               12           1          12           1
               13           1          13           1
               14           1          14           1
               15           1          15           1
               16           1          16           1
               17           1          17           1
               18           1          18           1

      18 record(s) selected.

答案 1 :(得分:2)

这将完成你的工作。只需根据需要更改它,更改表名称和列名称并点击运行。 我不知道你想要实现什么但是,听起来你只需要一张表中的虚拟数据。所以,我只是为了虚拟目的。

根据您的其他要求修改它。下面的示例包含您需要的所有内容,但您可能需要根据该修改。

DECLARE @I INT=0
SET @I=1
DECLARE @LASTF2 INT
DECLARE @LASTF4 INT

SELECT @LASTF2=ISNULL(MAX(F2),1) FROM TEST --JUST CHANGE TEST TO YOUR TABLENAME, AND     F1,F2,F3,F4 
SELECT @LASTF4=ISNULL(MAX(F4),1) FROM TEST -- AS YOUR FIELD NAMES

WHILE @I<10000
BEGIN
    INSERT INTO TEST (F1,F2,F3,F4)
    VALUES (@I,@LASTF2,@I,@LASTF4)

    SET @I=@I+1
END
GO
SELECT * FROM TEST