Ошибка INSERT после установки столбца значения DEFAULT

Я добавляю столбец в таблицу как:

RedMarkItemsId (IDENTITY(1,1) NOT NULL PRIMARY KEY)
TaskId (UNIQUEIDENTIFIER)
CreationDate (DATETIME)
CreatedBy (UNIQUEIDENTIFIER)

Я хочу создать столбец вроде:

  ALTER TABLE RedMarkItems ADD Item1 BIT DEFAULT(0)

Но когда я пытаюсь вставить какие-то значения:

INSERT INTO RedMarkItems 
VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF')

Выдает ошибку:

Column name or number of supplied values does not match table definition.

Почему я получаю эту ошибку, если устанавливаю DEFAULT(0) в этот новый столбец?

Скрипт создания таблицы:

CREATE TABLE RedMarkItems 
(
    RedMarkItemsId INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    TaskId UNIQUEIDENTIFIER,
    CreationDate DATETIME,
    CreatedBy UNIQUEIDENTIFIER
)

В моем операторе вставки у меня есть TaskId, CreationDate и CreatedBy, мне не нужно указывать RedMarkItemsId, потому что это IDENTITY (1,1), поэтому это автономное поле @gtosto

Jonathan 31.12.2018 20:17

Подумайте об этом немного подробнее: вместо этого identity может находиться в любом месте в списке столбцов, поэтому SQL Server не может догадаться, что 3 введенных вами значения должны входить в 3 столбца, которые вы назвали; ты должен это сказать. Это хорошо: формулировка является последовательной, а не чрезмерно благотворительной, делая предположение, что identity окажется первым столбцом, где это предположение может привести к неожиданным результатам и будет работать только в 1 ситуации.

underscore_d 31.12.2018 20:40
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
465
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта часть SQL недействительна:

INSERT INTO RedMarkItems 
VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF')

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

INSERT INTO RedMarkItems(
    RedMarkItemsId, 
    TaskId, 
    CreationDate
) VALUES (
    '9B093907-2072-4F59-A55C-0003CE89EF9E', 
    GETDATE(), 
    '6074CAEA-7A8E-4699-9451-16C2EAF394EF'
);

Похоже, RedMarkItemsId следует заменить на TaskId. Он хочет опустить RedMarkItemsId, поскольку это столбец Identity ...

Petro K 31.12.2018 22:50

Другие вопросы по теме