вставить строку без заданного основного столбца - PullRequest
4 голосов
/ 27 октября 2010

У меня есть этот запрос:

INSERT INTO GOST (ASSORTMENTID, ROZMIAR, GOST) 
VALUES ( 54,'S','MjgwMzktODkgMTc0LTk2') 

Я хочу вставить новую строку в таблицу ГОСТ, но я не хочу указывать столбец с первичным ключом - GOSTID. Я хочу, чтобы эта база данных установила следующее значение идентификатора. Когда я запускаю этот код, у меня появляется эта ошибка:

ошибка проверки для столбца GOSTID, значение "* null *"

Я понимаю, что должен установить столбец GOSTID в запросе INSERT, да?

Можно запустить это без этого параметра?

Ответы [ 3 ]

3 голосов
/ 28 октября 2010

Я думаю, что пример сценария стоит более 1000 слов:

Перейдите в интерфейс оболочки на компьютере сервера Firebird, перейдите в папку, в которой у вас есть права на чтение / запись, запустите isql или isql-fb (зависит от вашей системы и версии firebird) и запустите этот скрипт:

create database 'netmajor.fdb' user 'sysdba' password 'masterkey';
set autoddl off;

create table netmajor_example (
    netmajor_id     integer not null
  , str_data        varchar(200)
  , int_data        integer
  , constraint pk_netmajor_example
      primary key (netmajor_id)
);

create generator netmajor_gen;

set term ^;

create trigger netmajor_pkassign
   for netmajor_example
active before insert position 1
AS
begin
  if (new.netmajor_id is null) then
    new.netmajor_id = gen_id(netmajor_gen, 1);
end
^

commit work^

set term ; ^


insert into netmajor_example (str_data, int_data) values ('one', 1);
insert into netmajor_example (str_data, int_data) values ('twenty', 20);
commit work;

select * from netmajor_example;

Посмотрите на результаты, которые в моей машине:

; NETMAJOR_ID STR_DATA                     INT_DATA
;============ ============================ ============
;           1 one                                     1
;           2 twenty                                 20

Если у вас есть вопросы, не стесняйтесь обращаться. С наилучшими пожеланиями.

1 голос
/ 27 октября 2010

Очевидно, что ваш первичный ключ - это столбец NOT NULL , что означает, что он всегда требуется.Вы не можете вставить строку без указания значения для первичного ключа (если только это не был столбец с «автоматическим номером», который автоматически устанавливается системой базы данных).

0 голосов
/ 27 октября 2010

Используйте триггер «перед вставкой», чтобы установить значение для первичного ключа.Firebird не имеет типа поля «автоинкремент», поэтому вам нужно позаботиться об этом самостоятельно.

См. http://www.firebirdfaq.org/faq29/, чтобы узнать, как это сделать.Некоторые приложения БД (например, Database Workbench) могут автоматически создавать триггер и генератор.

...