DB2存储过程,要(重新)重新启动带编号的列

问题描述 投票:0回答:1

我正在使用SSIS包来刷新生产数据的开发表,并使用执行SQL任务在下面的查询中运行。

alter table DEV.tablename alter column ID drop identity;
delete from DEV.tablename;
insert into DEV.tablename SELECT * FROM RESTORE.COVERAGE;
alter table DEV.tablename  alter column ID set generated always as identity;
alter table DEV.tablename  alter column ID restart with some_Integer_value;

我无法通过参数(在上述情况下为some_Integer_value)将数字传递给[在执行SQL任务中传递参数] [1]执行SQL任务(SSIS),因此我不得不使用SP来运行最后一个ALTER表语句。

CREATE PROCEDURE set_auto_incrementSP (IN TABLENAM VARCHAR(50),IN TABLECOLUM VARCHAR(30),IN INC_NUM INT)
    RESULT SETS 1
    LANGUAGE SQL

P1: BEGIN


    DECLARE STATEMENT1 VARCHAR(50);
    DECLARE NAME VARCHAR(30);
    DECLARE TABLENAME VARCHAR(50);
    DECLARE TABLECOLUMN VARCHAR(30);
    DECLARE INC_NUMBER INTEGER DEFAULT 0;

    SET TABLENAME=TABLENAM;
    SET TABLECOLUMN=TABLECOLUM;
    SET INC_NUMBER=INC_NUM;
    -- Declare cursor



        SET STATEMENT1 = 'ALTER TABLE '||TABLENAME||' alter column '||TABLECOLUMN||' restart with'||INC_NUMBER||' ';

        PREPARE NAME FROM STATEMENT1;

        EXECUTE IMMEDIATE STATEMENT1;
    ```
SP has been deployed successfully but when executing the SP I see the below error.


**Run: DEV.SET_AUTO_INCREMENTSP(VARCHAR(50), VARCHAR(30), INTEGER)
{? = call DEV.SET_AUTO_INCREMENTSP(?,?,?)}
[SQL0104] Token <END-OF-STATEMENT> was not valid. Valid tokens: SET DROP RESTART.
Run of routine failed.
 - Roll back completed successfully.**

  [1]: https://i.stack.imgur.com/dtaZg.jpg


sql stored-procedures ssis db2 db2-400
1个回答
0
投票

STATEMENT1为50长,可能还不够,并且您不能在with和数字之间放置任何空格

© www.soinside.com 2019 - 2024. All rights reserved.