Команда языка DML - INSERT используется для ввода новых строк в таблицу.
Синтаксис команды:
INSERT INTO {<имя таблицы>[(<имя столбца> [псевдоним] [, …n]] |[<подзапрос>]}
VALUES (<значение>[,…n]);
При реализации команды INSERT необходимо отслеживать, чтобы
· Последовательность данных в предложение VALUES, соответствовала порядку столбцов в таблице.
· Заполнялись все столбцы с признаком NOT NULL.
Пример 12
Задача.
Ввести в таблицу SGroup значения названия групп ИСТ-01 и АИС-01.
Решение.
INSERT INTO SGroup (NameGroup)
VALUES('АИС-01');
INSERT INTO SGroup (NameGroup)
VALUES('ИСT-01');
При успешном выполнении каждой команды вы получите сообщение: 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
Задача.
Ввести данные, приведенные ниже (см. Приложение 2. Пример заполнения таблиц.) в таблицу Student.
Решение.
Попытка ввода первой строки с помощью приведенной ниже команды
Syntax error converting datetime from character string
Ошибка вызвана несоответствием типов данных, причиной же ее послужило нарушение порядка столбцов в списке VALUES. (Надо отметить, что появление сообщения об ошибке, является наилучшим исходом. Дела бы обстояли хуже, если бы не возникло конфликта, вызванного несоответствием типа данных или размера данных. В этом случае результатом стала бы некорректно заполненная таблица.) Исправить ошибку можно или, изменив порядок следования данных в предложении:
Данные в таблицу можно внести и из других таблиц, используя запрос SELECT. Реакцией системы, как и в предыдущем случае при успешном выполнении команды будет фраза N row affected (создано N строк), где в качестве N указывается количество созданных строк.
Задание 3
Создать таблицу Student1, аналогичную таблице Student и заполнить ее данными из таблицы приложения (см. Приложение 2. Пример заполнения таблиц.)
Пример 15
Задача.
Ввести в таблицу Student записи из таблицы Student1.