Проверьте ограничение для строки с форматом в SQL Server

У меня есть таблица, которая определяется как:

create table HLV (
id nvarchar(7) check (id LIKE 'HLV[0-9][0-9][0-9][0-9]') Primary key,
birthday date,
full_name nvarchar(20) NOT NULL,
win int check (win > 0),
lose int check (lose > 0),
draw int check (draw > 0)
) 

Я выполняю код, и он работает, но когда я вставляю в него данные с

insert into HLV values ('HLV0001',GETDATE(), 10,5,6)

Я получил ошибку

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

Это потому, что проверка не так?

3 ответа

Решение

Нет, это потому что ты пропустил full_name в вашем заявлении вставки:

insert into HLV values ('HLV0001',GETDATE(), 'michael jordan' ,10,5,6)

Просто чтобы расширить ответ Джорджи Накери,

Когда вы используете insert into HLV без имен столбцов сервер sql предполагает, что вы собираетесь передать все столбцы, определенные в таблице (за исключением таких столбцов, как identity). В вашем Insert запрос

insert into HLV values (N'HLV0001',GETDATE(), 10,5,6)

SQL Server ожидает значения для всех столбцов id, birthday,full_name,win,lose,drawОднако вы только передаете значения для id, birthday,win,lose,drawследовательно, количество предоставленных значений не соответствует определению таблицы.

Если вы столбец full_name позволил NULL ценности или имели DEFAULT ограничение, вы могли бы сделать что-то вроде этого

insert into HLV(id, birthday,win,lose,draw) values (N'HLV0001',GETDATE(), 10,5,6)

Кроме того, на основе вашего ограничения проверки на ID, вы должны изменить его тип с nvarchar(7) в CHAR(7),

В таблице 6 столбцов, но только 5 значений в предложении вставки значений операторов. Вы можете решить эту проблему, указав все 6 обязательных значений, однако я также настоятельно рекомендую указать имена столбцов в операторе вставки, чтобы сделать их более надежными для изменения и более самодокументируемыми. Вам не нужно быть уверенным в фактическом порядке столбцов. Вы можете опускать обнуляемые и дефолтные столбцы. Новые обнуляемые или дефолтные столбцы могут быть добавлены без нарушения оператора.

ALTER TABLE HLV ADD gender char(1) NULL

INSERT HLV (id, birthday, full_name, win, lose, draw)
VALUES ('HLV0001', GETDATE(), 'first last', 10, 5, 6)

INSERT HLV (full_name, id, birthday)
VALUES ('last, first', 'HLV0002', GETDATE())

Есть множество примеров на MSDN.

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