Как вставить запись значений по умолчанию для конкретной новой записи первичного ключа? - PullRequest
0 голосов
/ 27 марта 2012

У меня есть таблица myTable с несколькими столбцами, для некоторых из которых есть значение по умолчанию, а для остальных столбцов NULL является возможным и приемлемым значением.

Существует первичный ключ с именем pkVariable, а остальные столбцы с именами column2, column3, column4 и column5. column2 и column3 настроены на получение значений по умолчанию 0 и 1 соответственно и настроены как NOT NULL. У column4 и column5 нет значений по умолчанию, но они могут иметь значения NULL как возможность.

У меня вопрос, как мне вставить новую «пустую» запись в myTable. Я имею в виду, что я хотел бы иметь в новой записи в myTable значение первичного ключа, значение по умолчанию для column2 & column3 и значение NULL для column4 и column5.

Если бы pkVariable имел значение по умолчанию или был IDENTITY, я мог бы сделать это:

INSERT INTO myTable DEFAULT VALUES;

купить я не могу, потому что pkVariable должен получить pkValue в предложении INSERT.

Я могу использовать:

INSERT INTO myTable VALUES (pkValue, DEFAULT, DEFAULT, DEFAULT, DEFAULT);

и это работает, но я не хотел бы зависеть от количества столбцов.

Следовательно, каков правильный синтаксис для достижения моей цели?

Я ошибочно думал, что смогу сделать это:

INSERT INTO [myTable] ([pkVariable]) VALUES (pkValue) DEFUALT VALUES;

и подумал об этом направлении:

WITH pkVariable = pkValue
INSERT INTO [myTable] DEFAULT VALUES;

какие-либо другие предложения?

Ответы [ 4 ]

6 голосов
/ 27 марта 2012

Просто не включайте столбцы, которые вы хотите по умолчанию в вашей вставке. Он будет использовать значения по умолчанию, если столбцы не включены.

MYTABLE
-PKColumn IDENTITY(1,1)
-Column1 VARCHAR DEFAULT 'ColumnValue'
-Column2 INT

Тогда все, что вам нужно сделать, это:

INSERT INTO MYTABLE (Column2) VALUES (123);

Строка будет вставлена ​​как

1|'ColumnValue'|123

Обратите внимание, как все значения по умолчанию были вставлены

0 голосов
/ 05 июня 2018

Используйте последовательность для своего столбца PK ID со следующей командой

nextval('[name of your sequence]'::regclass)

Затем вы можете вставить с помощью INSERT AS SELECT [whatever]

0 голосов
/ 27 марта 2012

Если во всех ваших столбцах допустимы пустые значения или значение по умолчанию и вы не хотите указывать какие-либо значения при вставке, попробуйте что-то вроде:

drop table #test
create table #test (id int identity, test varchar(10) default 'test' not null, 
                    test2 varchar (10) null, test3 int default 1 not null)

insert into #test (test)
values (default)

select * from #test
0 голосов
/ 27 марта 2012

Если вы пытаетесь сказать, что хотите ввести запись с конкретным первичным ключом, используйте это.

set identity_insert mytable on
insert into mytable (pkvariable) values (1)
set identity_insert mytable off

Это предполагает, что вы используете идентификатор с автоматическим приращением для своего первичного ключа.

...