Команда языка DML - INSERT используется для ввода новых строк в таблицу.
Синтаксис команды:
INSERT INTO {<имя таблицы>[(<имя столбца> [псевдоним] [, …n]] |[<подзапрос>]}
VALUES (<значение>[,…n]);
При реализации команды INSERT необходимо отслеживать, чтобы
· Последовательность данных в предложение VALUES, соответствовала порядку столбцов в таблице.
· Заполнялись все столбцы с признаком NOT NULL.
Пример 12
Задача.
Ввести в таблицу SGroup значения названия групп ИСТ-03 и АИС-03.
Решение.
INSERT INTO SGroup (NameGroup)
VALUES('ИСT-03');
INSERT INTO SGroup (NameGroup)
VALUES('АИС-03');
При успешном выполнении каждой команды вы получите сообщение: 1 row(s) affected
Примечание.
Обратим внимание на то, что поле IDGroup заполняется автоматически, поскольку имеет свойство IDENTITY. Попытка выполнить, например, такую команду
INSERT INTO SGroup (IDGroup, NameGroup)
VALUES(3,'ИСT-02');
Приведет к сообщению об ошибке.
Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'SGroup' when IDENTITY_INSERT is set to OFF.
Однако если вы все-таки хотите ввести код группы вручную, вам необходимо отключить действие IDENTITY с помощью команды SET IDENTITY_INSERT.
|
|
Синтаксис команды:
SET IDENTITY_INSERT <имя таблицы> { ON | OFF }
Опция ON отключает процесс автоматического присвоения identity-значений, OFF - включает.
Пример 13
Задача.
Ввести в таблицу SGroup значения названия групп ИСТ-02, присвоив столбцу IDGroup значение 3.
Решение.
SET IDENTITY_INSERT SGroup ON [3]
INSERT INTO SGroup (IDGroup, NameGroup)
VALUES(3,'ИСT-02');
Несмотря на то, что в команде INSERT список столбцов является необязательным, его рекомендуется указывать явно. Последнее позволяет избежать недиагностируемых ошибок при заполнении столбцов. Если вы все-таки хотите отказаться от перечисления столбцов, то вам придется отслеживать, чтобы порядок столбцов в таблице соответствовал порядку столбцов в команде INSERT.
Пример 14
Задача.
Ввести данные о студенте Иванове в таблицу Student (см. Приложение 2. Пример заполнения таблиц).
Решение.
INSERT INTO Student
VALUES('050001','1111111111','Иванов И.И.',3,'8701','192355','01.06.2002', 'УВД г.Ухты');
Примечание.
Выполнение операции ввода так, как это описано в предыдущем примере (см. Пример 14), может привести к некорректному заполнению базы данных или сообщению об ошибке.
Например, попытка ввода этой же строки с помощью приведенной ниже команды
INSERT INTO Student
VALUES('050001','Иванов И.И.',3,'8701','192355','01.06.2002','ГОВД г.Ухты','1111111111')
даст сообщение об ошибке:
Syntax error converting datetime from character string
Ошибка вызвана несоответствием типов данных, причиной же ее послужило нарушение порядка столбцов в списке VALUES. (Надо отметить, что появление сообщения об ошибке является наилучшим исходом. Дела обстояли бы хуже, если бы не возникло конфликта, вызванного несоответствием типа данных или размера данных. В этом случае результатом стала бы некорректно заполненная таблица.) Избежать ошибки можно, перечислив все столбцы после имени таблицы в том же порядке, в котором они следуют в предложении VALUES.
|
|
INSERT INTO Student (NRecordBook,SName,IDGroup,SPasport,NPasport,DataPasport, NameDeptPasport,INN)
VALUES('050002', 'Петров П.П',3,'8702','191256','11.20.2002', 'УВД г.Сосногорск', '1111111112')
Этот вариант более надежный, кроме того, он позволяет вводить не все данные. Например, если столбец имеет признак NULL, то его значения могут не вводиться - в следующем примере не вводится значение атрибута INN, имеющего признак NULL.
INSERT INTO Student (NRecordBook,SName,IDGroup,SPasport,NPasport,DataPasport, NameDeptPasport)
VALUES('050003','Сидоров С.С.', 2,'8703','192457','11.26.2002', 'УВД г.Ухты')
Данные в таблицу можно внести и из других таблиц, используя запрос SELECT. Реакцией системы, как и в предыдущем случае, при успешном выполнении команды будет фраза N row affected (создано N строк), где в качестве N указывается количество созданных строк.
Задание 3
Создать таблицу Student1, аналогичную таблице Student и заполнить ее данными из таблицы (см. Приложение 2. Пример заполнения таблиц).
Пример 15
Задача.
Ввести в таблицу Student записи из таблицы Student1.
Решение.
INSERT INTO Student
SELECT *
FROM Student1;
Задание 4
Заполнить таблицу Subject в соответствии с таблицей (см.)