powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / FB3. Поле с автоинкрементом не отображается в DDL скрипте
10 сообщений из 10, страница 1 из 1
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38708517
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например делаем вот такую табличку

Код: sql
1.
2.
3.
CREATE TABLE T(
  ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
);



Щёлкаем по табличке T, переходим на вкладку скрипт и видим

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE T (
    ID  INTEGER NOT NULL
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE T ADD PRIMARY KEY (ID);



т.е. автоинкремент сожрался
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38708518
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на вкладке поля кстати всё нормально. Там значок автоинкремента высвечивается
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38709063
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а как в этом случае добавить ПК _после_ создания таблицы?
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38709072
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

так же как и в других случаях

Код: sql
1.
2.
3.
4.
5.
RECREATE TABLE T(
  ID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL
);

ALTER TABLE T ADD PRIMARY KEY (ID);
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38709075
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно даже без NOT NULL, т.к. оно неявно добавляется при использовании IDENTITY
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38709215
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я не то спросил...
Я имел в виду GENERATED BY DEFAULT AS IDENTITY назначить потом. Если, например, нужно сделать копию таблицы с данными, то сначала создается таблица без автоинкремента, затем в нее заливаются данные (включая значения ПК), а уж потом выставляется значение генератора и навешивается констрейнт ПК.
Если автоинкремент нельзя навесить позже - это, по-моему, не есть хорошо.
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38709223
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

позже навесить нельзя. Но выход есть

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SET AUTODDL ON;

RECREATE TABLE T(
  ID INT GENERATED BY DEFAULT AS IDENTITY,
  K INT
);

/* Тута заливаем данные пофиг на внутренний генератор */
/* Собственно копия */
INSERT INTO T(ID, K) VALUES(7, 1);
INSERT INTO T(ID, K) VALUES(10, 2);

COMMIT;

/* Стартуем внутренний генератор с 10 */
ALTER TABLE T ALTER COLUMN ID RESTART WITH 10;

/* Вешаем ПК */
ALTER TABLE T ADD PRIMARY KEY (ID);

/* Всё продолжает работать */

INSERT INTO T(K) VALUES(3);

COMMIT;
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38709241
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда ID указываем в запросе явно, то внутренний генератор не инкрементируется. Поэтому после заливки его надо стартануть с максимального ID. Ну или запросом выяснить внутреннее имя генератора

Код: sql
1.
2.
3.
4.
5.
SELECT
    RF.RDB$GENERATOR_NAME
FROM
    RDB$RELATION_FIELDS RF
WHERE RDB$RELATION_NAME = 'T' AND RDB$FIELD_NAME = 'ID'



а потом его значение
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38710151
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправил.
...
Рейтинг: 0 / 0
FB3. Поле с автоинкрементом не отображается в DDL скрипте
    #38710296
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / FB3. Поле с автоинкрементом не отображается в DDL скрипте
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]