Проверьте ограничение для строки с форматом в 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.