我正在使用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
STATEMENT1为50长,可能还不够,并且您不能在with和数字之间放置任何空格