Як вставити значення за замовчуванням у таблицю SQL?


82

У мене є така таблиця:

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)

Я хочу вставити рядок, який має значення за замовчуванням для field2 та field4.

Я пробував, insert into table1 values (5,null,10,null)але це не працює і ISNULL(field2,default)не працює.

Як я можу сказати базі даних використовувати значення за замовчуванням для стовпця, коли я вставляю рядок?


2
Дивіться також це запитання для випадку, коли всі стовпці мають значення за замовчуванням.
stakx - більше не вносить внесок

1
Будь ласка, ніколи не повідомляйте " не працює ", не визначаючи як .
underscore_d

Відповіді:


90

Просто не включайте стовпці, для яких ви хочете використовувати значення за замовчуванням, у своєму операторі вставки. Наприклад:

INSERT INTO table1 (field1, field3) VALUES (5, 10);

... прийме значення за замовчуванням для field2і field4, і призначить 5 до field1і 10 до field3.


1
Що робити, якщо стовпець не визначив значень за замовчуванням, а також встановив значення "НЕ ДОЗВОЛИТИ НУЛІ"?
Данон

4
@Danon Це не питання, яке задає ОП. Будь ласка, опублікуйте нове питання, замість того, щоб залишати такий коментар. Однак я навіть не можу здогадатися, про що ви запитуєте, тому що немає сенсу намагатися вставити значення за замовчуванням у стовпець, який обидва не має визначеного значення за замовчуванням і є NOT NULL...
binki

@binki Можливо, мені слід переформулювати мій коментар: "aroth: ваша відповідь не повна, через можливий виняток, коли в стовпці не визначено значення за замовчуванням, а також встановлено значення" NOT ALLOW NULLS ""
Данон

3
@Danon - В операційній системі зазначено: "Я хочу вставити рядок, який має значення за замовчуванням для полів 2 і field4", і запитує "Як я можу сказати базі даних використовувати значення за замовчуванням для стовпця, коли я вставляю рядок?". Ви правильно зазначили, що ця відповідь не охоплює випадок, коли значення за замовчуванням не визначені, однак, оскільки питання явно не задає питання про цей випадок, насправді не точно описувати відповідь як неповну. Ви говорите про зовсім інше питання (яке найкраще задавати окремо).
aroth

157

Найкраща практика - перерахувати стовпці, щоб ви не залежали від змін таблиці (новий стовпець або порядок стовпців тощо)

insert into table1 (field1, field3)  values (5,10)

Однак, якщо ви не хочете цього робити, використовуйте DEFAULTключове слово

insert into table1 values (5, DEFAULT, 10, DEFAULT)

14
Чудово! Це саме те, що я шукав. Примітка: Ви також можете вказати стовпці та значення, передаючи DEFAULT замість NULL, і ви отримаєте значення за замовчуванням, якщо є обмеження DEFAULT, або NULL, якщо стовпець має значення NULL і не вказано обмеження за замовчуванням.
Джон

2
Це справді працює, але коли я намагався бути фантастичним, (CASE WHEN This = That THEN 'SpecifiedValue' ELSE DEFAULT END)це не спрацювало б, на мій жаль. Мені все одно довелося або підготувати кілька вкладок-виписок, щоб охопити всі мої сценарії, або використовувати Dynamic-SQL. :(
MikeTeeVee

З якихось причин я не зміг зробити цю роботу з браузером БД для SQLite. Постійно скаржився на синтаксичну помилку навколо DEFAULT. Мені довелося вказати стовпці, що не за замовчуванням, як у верхньому прикладі, потім просто вказати значення для них, і тоді це нарешті запрацювало.
Will Matheson

В офіційній документації про це нічого не сказано. Це DEFAULTбезпечне використання ? (Якщо це не задокументовано, ми не можемо скаржитися на відсутність функціональних можливостей у майбутній версії sqlite3 без будь-якого попередження.)
ynn

@ynn Крім того, у книзі Використання SQLite (с. 326) сказано: " Неможливо вказати значення за замовчуванням, окрім як залишити стовпець поза списком стовпців або знати, яке значення за замовчуванням, і явно вставити його. ".
ynn

41

Найкращий спосіб:

insert your_table
default values

5
Це працює, якщо всі стовпці мають пов’язані за замовчуванням, а один не хоче вказувати імена стовпців.
umbersar

6
Хоча це не обов'язково була повною відповіддю на поставлене запитання, ви випадково відповіли на моє запитання, тож дякую за це :)
Райан,

5

Спробуйте так

INSERT INTO table1 (field1, field3) VALUES (5,10)

Тоді поля2 та поле4 повинні мати значення за замовчуванням.


3

Якщо ваші стовпці не повинні містити NULLзначень, вам також потрібно визначити стовпці NOT NULL, інакше переданий NULLбуде використаний замість типового і не призведе до помилки.

Якщо ви не здасте в будь-якому значенні цих полів (що вимагає вказати поля , які ви дійсно хочете використовувати), буде використовуватися за замовчуванням:

INSERT INTO 
  table1 (field1, field3) 
VALUES   (5,10)

1

Ви можете писати таким чином

GO
ALTER TABLE Table_name  ADD
column_name decimal(18, 2) NOT NULL CONSTRAINT Constant_name DEFAULT 0
GO
ALTER TABLE Table_name SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

0

Щоб вставити значення за замовчуванням, ви повинні опустити їх приблизно так:

Insert into Table (Field2) values(5)

Усі інші поля матимуть значення null або значення за замовчуванням, якщо це визначено.


-5
CREATE PROC SP_EMPLOYEE                             --By Using TYPE parameter and CASE  in Stored procedure
(@TYPE INT)
AS
BEGIN
IF @TYPE=1
BEGIN
SELECT DESIGID,DESIGNAME FROM GP_DESIGNATION
END
IF @TYPE=2
BEGIN
SELECT ID,NAME,DESIGNAME,
case D.ISACTIVE when 'Y' then 'ISACTIVE' when 'N' then 'INACTIVE' else 'not' end as ACTIVE
 FROM GP_EMPLOYEEDETAILS ED 
  JOIN  GP_DESIGNATION D ON ED.DESIGNATION=D.DESIGID
END
END

6
Я не думаю, що це відповідь.
Джуліо Каччін,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.