0

我在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'。请问有人知道怎么做吗?

4

2 回答 2

0

如果您正在寻找按程序排序的分配器,那么序列和 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 个数字。

于 2016-07-06T05:49:05.997 回答
-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;
于 2016-07-04T13:49:23.440 回答