Transact-sql, вставка даних
Крім інструкції SELECT, яка була розглянута раніше, мова маніпуляції даними DML (Data Manipulation Language) містить три інші інструкції: INSERT, UPDATE і DELETE. Подібно інструкції SELECT ці три інструкції оперують або таблицями, або уявленнями. У цій статті розглядається інструкція INSERT, а дві інші інструкції розглядаються в наступній статті.
Інструкція INSERT вставляє рядки (або частини рядків) в таблицю. Існує дві різні форми цієї інструкції:
Перша форма інструкції дозволяє вставити в таблицю один рядок (або частина її). А друга форма інструкції INSERT дозволяє вставити в таблицю результуючий набір інструкції SELECT або збереженої процедури, виконуваної за допомогою інструкції EXECUTE. Процедура повинна повертати дані для вставки в таблицю. Застосовувана з інструкцією INSERT інструкція SELECT може вибирати значення з іншої або тієї ж самої таблиці, в яку вставляються дані, за умови сумісності типів даних відповідних стовпців.
Для обох форм тип даних кожного вставляється значення має бути сумісним з типом даних відповідного стовпця таблиці. Всі рядкові і тимчасові дані повинні бути укладені в лапки; чисельні значення брати в лапки не потрібно.
Вставка одного рядка
Для обох форм інструкції INSERT явне вказівку списку стовпців не є обов'язковим. Відсутність списку стовпців рівнозначно вказівкою всіх стовпців таблиці.
Параметр DEFAULT VALUES вставляє значення за замовчуванням для всіх стовпців. У стовпці з типом даних TIMESTAMP або властивістю IDENTITY за замовчуванням вставляються значення, автоматично створювані системою. Для стовпців інших типів даних вставляється відповідне нульове значення за замовчуванням, якщо таке є, або NULL в іншому випадку. Якщо для стовпця значення NULL не вирішені та для нього не визначено значення за замовчуванням, виконання інструкції INSERT завершується помилкою і виводиться відповідне повідомлення.
У прикладі нижче показана вставка рядків в таблицю Employee бази даних SampleDb, демонструючи використання інструкції INSERT для вставки невеликого обсягу даних в базу даних:
Існує два різні способи вставки значень в новий рядок. Інструкція INSERT в прикладі нижче явно використовує ключове слово NULL і вставляє значення NULL в відповідний стовпець:
Щоб вставити значення в деякі (але не в усі) стовпці таблиці, зазвичай необхідно явно вказати ці стовпці. Чи не зазначені стовпці повинні або дозволяти значення NULL, або для них має бути визначено значення за замовчуванням.
Попередні два приклади рівнозначні. У таблиці Employee єдиним стовпцем, що дозволяє значення NULL, є стовпець DepartmentNumber, а для всіх інших стовпців це значення було заборонено пропозицією NOT NULL в інструкції CREATE TABLE.
Порядок значень в реченні VALUES інструкції INSERT може відрізнятися від порядку, зазначеного в інструкції CREATE TABLE. У такому випадку їх порядок повинен збігатися з порядком, в якому відповідні стовпці перераховані в списку стовпців. Нижче показаний приклад вставки даних в порядку, відмінному від вихідного:
Вставка декількох рядків
Друга форма інструкції INSERT вставляє в таблицю одну або кілька рядків, обраних підзапитом. У прикладі нижче показана вставка рядків у таблицю, використовуючи другу форму інструкції INSERT. В даному випадку виконується запит по вибірці номерів та імен відділів, розташованих в Москві, і завантаження отриманого результуючого набору в нову таблицю, створену раніше.
Створювана в прикладі вище нова таблиця MoscowDepartment має ті ж стовпчики, що і існуюча таблиця Department, за винятком відсутнього стовпчика Location. Підзапит в інструкції INSERT вибирає в таблиці Department всі рядки, для яких значення стовпця Location одно 'Москва', які потім вставляються в створену на початку запиту нову таблицю.
У прикладі нижче показаний ще один спосіб вставки рядків у таблицю, використовуючи другу форму інструкції INSERT. В даному випадку виконується запит на вибірку табельних номерів, номерів проектів і дат початку роботи над проектом для всіх співробітників з посадою 'Менеджер', які працюють над проектом p2 з наступним завантаженням отриманого результуючого набору в нову таблицю, яка створюється на початку запиту:
Перед вставкою рядків за допомогою інструкції INSERT таблиці MoscowDepartment і ManagerTeam (в прикладах вище) були порожніми. Якщо ж таблиця вже існувала і містила рядки з даними, то до неї були б додані нові рядки.
Конструктори значень таблиці і інструкція INSERT
Конструктор значень таблиці або рядки (table (row) value constructor) дозволяє вставити в таблицю кілька записів (рядків) за допомогою інструкції мови DML, такий як, наприклад, INSERT або UPDATE. У прикладі нижче показана вставка в таблицю кількох рядків, використовуючи такий конструктор за допомогою інструкції INSERT:
У цьому прикладі нижче інструкція INSERT одночасно вставляє три рядки в таблицю Department, використовуючи конструктор значень таблиці. Як можна бачити, синтаксис цього конструктора досить простий. Для вставки в таблицю рядків з даними за допомогою конструктора значень таблиці потрібно в круглих дужках перерахувати значення кожного рядка, розділяючи як значення кожного списку, так і окремі списки запитом.