【问题标题】:Reset AUTO_INCREMENT field in SAP HANA重置 SAP HANA 中的 AUTO_INCREMENT 字段
【发布时间】:2016-07-04 07:27:09
【问题描述】:

我在 SAP Hana 上遇到问题。 我创建了一个table 为:

create column table some_names
   (ID bigint not null primary key generated by default as IDENTITY,
   NAME nvarchar(30));

我插入了一些值:

insert into some_names (name) values ('Huey');
insert into some_names (name) values ('Dewey');      
insert into some_names (name) values ('Louie');   

检查:

select * from some_names;

ID  NAME
1   Huey
2   Dewey
3   Louie

效果很好。

但我想将此 ID 字段的 auto_increment 重置为“0”。 请问有人知道怎么做吗?

【问题讨论】:

  • 一个简单的谷歌搜索导致多种方法 - 你尝试过其中任何一种吗?
  • 感谢您的回答。事实上,我在谷歌上查了一下,但我没有发现任何可以帮助我完成这项任务的结果,而且大多数结果都与其他 DBMS 有关。 :( 我也检查了 SO 但我没有找到任何东西。
  • 您需要从一开始就从 0 开始,还是稍后在某个时间点重新开始序列?
  • 我想在每次执行存储过程时重置自动增量(所以我希望存储过程的第一行类似于alter column ID set auto_increment=0... 或类似的东西)但是我不知道该怎么做。
  • 好的,我发现auto_increment fieldsequence。我可以通过这样做来显示我当前的id

标签: sap hana hana-sql-script


【解决方案1】:

如果您正在寻找按程序排序的序列分配器,那么序列和 IDENTITY 列可能是错误的选择。 两者都坚持最后保证的最高数字,以便与存储的数据保持一致。 如果数字实际上是易变的,并且重复使用相同的数字并不重要,您应该自己去生成数字序列。

一种方法是使用交叉连接、LIMIT 和 ROW_NUMBER() 窗口函数。 另一种选择是创建一个返回序列数字表的表函数:

drop function genNo;
create function genNo (in num_rows bigint) returns table (NULLCOL BIGINT, SEQID BIGINT)
as

begin
    DECLARE NULLCOL  INTEGER ARRAY;
    NULLCOL [:num_rows] = NULL;

    result = UNNEST (:NULLCOL) WITH ORDINALITY AS ("NULLCOL", "SEQID");
    return :result;
end;

有了这个,你可以例如运行

select SEQID
from genNo (1000000)

按递增顺序获得 1000000 个数字。

【讨论】:

    【解决方案2】:

    您应该使用通用序列。下面的代码就足够了:

    DROP SEQUENCE SEQ_A;
    CREATE SEQUENCE SEQ_A START WITH 0 MINVALUE 0;  
    
    DROP TABLE "TABLE_A";
    CREATE COLUMN TABLE "TABLE_A" (
        ID BIGINT,
        NAME nvarchar(30));
    
    INSERT INTO "TABLE_A" (ID,NAME) VALUES (SEQ_A.NEXTVAL,'Shidai');
    INSERT INTO "TABLE_A" (ID,NAME) VALUES (SEQ_A.NEXTVAL,'KrasshX');  
    SELECT * FROM "TABLE_A";
    ALTER SEQUENCE SEQ_A RESTART WITH 0;
    

    【讨论】:

    • 这种方法只有在任何给定时间只有一个会话使用该序列时才有效。一旦两个或更多会话按顺序停止,则没有一个会话获得预期的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多