Сбросить поле AUTO_INCREMENT в SAP HANA
У меня проблема с 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
Это сработало отлично.
Но я хотел бы сбросить auto_increment этого поля идентификатора в "0". Кто-нибудь знает, как это сделать, пожалуйста?
3 ответа
Если вы ищете распределитель последовательностей для каждой процедуры, то последовательности и столбец 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 номеров в порядке возрастания.
Вы можете создать таблицу столбцов с идентификатором столбца, используя параметр «СОЗДАВАТЬ ВСЕГДА КАК ИДЕНТИФИКАЦИЮ (МИНЗНАЧЕНИЕ 0 НАЧАТЬ С 0)», и тогда вы получите 0 в качестве первого значения в начале процесса. Затем, прежде чем снова запустить процесс, вы можете DROP свою таблицу, а затем заново создать ее снова, всегда получая один и тот же результат.
Вы должны пойти с общей последовательностью. И кода ниже должно хватить:
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;