Как сделать так, чтобы столбец IDENTITY `id` начинался с другого значения?

У меня есть таблица DB2 с id столбец с автоматическим приращением, вот код:

"id" BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1)

Я вручную вставил значения, которые уже имеют id значения и не начинаются с 1. Теперь, когда я добавляю записи в эту таблицу, она начинается с 1. Я хотел бы начать, когда мои записи заканчиваются. То есть, скажем, последняя запись имеет идентификатор 23, я хотел бы, чтобы новая запись имела id = 24

Есть ли способ, которым я могу сделать это на всех моих столах с минимальными усилиями?

2 ответа

Основываясь на комментарии @mustaccio, наиболее простым для достижения этой цели является:

ALTER TABLE "tableName" ALTER COLUMN "columnName" RESTART WITH <new index value>

Ты можешь использовать

db2 alter table <table_name> alter column <column_name> drop identity 

а также

db2 alter table <table_name> alter column <column_name> set generated always as identity (start with <max(column_identity_name)>)

-

user@host:/home/db2inst1:>db2 "CREATE TABLE TEST (ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1),    NAME CHAR(6))"

insert into test (NAME) VALUES ('test1')"
insert into test (NAME) VALUES ('test2')"
insert into test (NAME) VALUES ('test3')"
insert into test (NAME) VALUES ('test4')"
insert into test (NAME) VALUES ('test5')"
insert into test (NAME) VALUES ('test6')"
insert into test (NAME) VALUES ('test7')"
insert into test (ID,NAME) VALUES (4,'test8')"
insert into test (ID,NAME) VALUES (4,'test9')"
insert into test (ID,NAME) VALUES (4,'test10')"
insert into test (ID,NAME) VALUES (4,'test11')"
insert into test (ID,NAME) VALUES (4,'test12')"
insert into test (ID,NAME) VALUES (2,'test13')"
insert into test (ID,NAME) VALUES (2,'test14')"
insert into test (ID,NAME) VALUES (2,'test15')"
insert into test (ID,NAME) VALUES (3,'test16')"
insert into test (NAME) VALUES ('test17')"
insert into test (NAME) VALUES ('test18')"
insert into test (NAME) VALUES ('test19')"
insert into test (NAME) VALUES ('test20')"
insert into test (NAME) VALUES ('test21')"
insert into test (NAME) VALUES ('test22')"
insert into test (NAME) VALUES ('test23')"
insert into test (NAME) VALUES ('test24')"

-

user@host:/home/db2inst1:>db2 "select row_number() over (order by ID) as ROWID,ID,NAME from test"


                ID                   NAME  
-------------------- -------------------- ------
                   1                    1 test1 
                   2                    2 test2 
                   3                    2 test13
                   4                    2 test14
                   5                    2 test15
                   6                    3 test3 
                   7                    3 test16
                   8                    4 test4 
                   9                    4 test8 
                  10                    4 test9 
                  11                    4 test10
                  12                    4 test11
                  13                    4 test12
                  14                    5 test5 
                  15                    6 test6 
                  16                    7 test7 
                  17                    8 test17
                  18                    9 test18
                  19                   10 test19
                  20                   11 test20
                  21                   12 test21
                  22                   13 test22
                  23                   14 test23
                  24                   15 test24

  24 record(s) selected.

user@host:/home/db2inst1:>db2 alter table test alter column id drop identity
DB20000I  The SQL command completed successfully.

Я нашел начальное значение из max row_number;

user@host:/home/db2inst1:>db2 "alter table test alter column id set generated always as identity (start with 25)"
DB20000I  The SQL command completed successfully.
insert into test (NAME) VALUES ('test25')"
DB20000I  The SQL command completed successfully.
user@host:/home/db2inst1:>db2 "select row_number() over (order by ID) as ROWID,ID,NAME from test"

ROWID                ID                   NAME  
-------------------- -------------------- ------
                   1                    1 test1 
                   2                    2 test2 
                   3                    2 test13
                   4                    2 test14
                   5                    2 test15
                   6                    3 test3 
                   7                    3 test16
                   8                    4 test4 
                   9                    4 test8 
                  10                    4 test9 
                  11                    4 test10
                  12                    4 test11
                  13                    4 test12
                  14                    5 test5 
                  15                    6 test6 
                  16                    7 test7 
                  17                    8 test17
                  18                    9 test18
                  19                   10 test19
                  20                   11 test20
                  21                   12 test21
                  22                   13 test22
                  23                   14 test23
                  24                   15 test24
                  25                   25 test25

  25 record(s) selected.
Другие вопросы по тегам