В этом уроке вы узнаете, как использовать оператор INSERT для добавления новой строки в таблицу.
Введение в оператор INSERT SQL Server
Чтобы добавить одну или несколько строк в таблицу, используйте оператор INSERT. Ниже показана самая простая форма оператора INSERT:
INSERT INTO table_name(column_list) VALUES(value_list);
Давайте рассмотрим этот синтаксис более подробно.
Сначала вы указываете имя таблицы, которую хотите вставить. Обычно вы ссылаетесь на имя таблицы по имени схемы, например, production.products, где production — это имя схемы, а products — это имя таблицы.
Во-вторых, вы указываете список из одного или нескольких столбцов, в которые вы хотите вставить данные. Вы должны заключить список столбцов в скобки и разделить столбцы запятыми.
Если столбец таблицы не отображается в списке столбцов, SQL Server должен иметь возможность предоставить значение для вставки, иначе строка не может быть вставлена.
SQL Server автоматически использует следующее значение для столбца, который доступен в таблице, но не отображается в списке столбцов оператора INSERT:
- Следующее инкрементное значение, если столбец имеет свойство IDENTITY.
- Значение по умолчанию, если для столбца указано значение по умолчанию.
- Текущее значение метки времени, если тип данных столбца является типом данных метки времени.
- Значение NULL, если столбец допускает значение NULL.
- Вычисленное значение, если столбец является вычисляемым столбцом.
В-третьих, вы предоставляете список значений для вставки в предложение VALUES. Каждый столбец в списке столбцов должен иметь соответствующее значение в списке значений. Кроме того, вы должны заключить список значений в скобки.
Примеры операторов INSERT для SQL Server
Давайте создадим новую таблицу под названием promotions для демонстрации:
CREATE TABLE sales.promotions(
promotion_id INT PRIMARY KEY IDENTITY(1, 1),
promotion_name VARCHAR(255) NOT NULL,
discount NUMERIC(3, 2) DEFAULT 0,
start_date DATE NOT NULL,
expired_date DATE NOT NULL
);
В этом операторе мы создали новую таблицу с именем promotions в схеме продаж. Таблица promotions имеет пять столбцов, включая идентификационный номер акции, название, скидку, дату начала и дату истечения срока действия.
Идентификационный номер рекламной акции — это столбец идентификаторов, поэтому его значение автоматически заполняется SQL Server при добавлении новой строки в таблицу.
1) Базовый пример INSERT
Следующий оператор вставляет новую строку в таблицу акций:
INSERT INTO sales.promotions(
promotion_name,
discount,
start_date,
expired_date
)
VALUES
(
'2018 Summer Promotion',
0.15,
'20180601',
'20180901'
);
В этом примере мы указали значения для четырех столбцов в таблице promotions. Мы не указали значение для столбца promotion_id, поскольку SQL Server предоставляет значение для этого столбца автоматически.
Если оператор INSERT выполнен успешно, вы получите количество вставленных строк. В этом случае SQL Server выдал следующее сообщение:
(1 row affected)
Для проверки операции вставки используйте следующий запрос:
SELECT
*
FROM
sales.promotions;
Вот результат, как вы и ожидали.
![]()
2) Вставка и возврат вставленных значений
Чтобы захватить вставленные значения, используйте предложение OUTPUT. Например, следующий оператор вставляет новую строку в таблицу promotions и возвращает вставленное значение столбца promotion_id:
INSERT INTO sales.promotions(
promotion_name,
discount,
start_date,
expired_date
) OUTPUT inserted.promotion_id
VALUES
(
'2018 Fall Promotion',
0.15,
'20181001',
'20181101'
);
![]()
Чтобы захватить вставленные значения из нескольких столбцов, укажите столбцы в выходных данных, как показано в следующем операторе:
INSERT INTO sales.promotions(
promotion_name,
discount,
start_date,
expired_date
) OUTPUT inserted.promotion_id,
inserted.promotion_name,
inserted.discount,
inserted.start_date,
inserted.expired_date
VALUES
(
'2018 Winter Promotion',
0.2,
'20181201',
'20190101'
);
Вывод следующий:
![]()
3) Вставьте явные значения в столбец идентификаторов.
Обычно значение для столбца идентификаторов не указывается, поскольку SQL Server предоставит это значение автоматически.
Однако в некоторых ситуациях вам может потребоваться вставить значение в столбец идентификаторов, например при миграции данных.
См. следующий оператор INSERT:
INSERT INTO sales.promotions(
promotion_id,
promotion_name,
discount,
start_date,
expired_date
) OUTPUT inserted.promotion_id
VALUES
(
4,
'2019 Spring Promotion',
0.25,
'20190201',
'20190301'
);
SQL Server выдал следующую ошибку:
Cannot insert explicit value for identity column in table 'promotions' when IDENTITY_INSERT is set to OFF.
Чтобы вставить явное значение для столбца идентификаторов, необходимо сначала выполнить следующий оператор:
SET IDENTITY_INSERT table_name ON;
Чтобы отключить вставку идентификатора, используйте аналогичный оператор:
SET IDENTITY_INSERT table_name OFF;
Давайте выполним следующие операторы, чтобы вставить значение для столбца идентификаторов в таблицу рекламных акций:
SET IDENTITY_INSERT sales.promotions ON;
INSERT INTO sales.promotions(
promotion_id,
promotion_name,
discount,
start_date,
expired_date
)
VALUES
(
4,
'2019 Spring Promotion',
0.25,
'20190201',
'20190301'
);
SET IDENTITY_INSERT sales.promotions OFF;
В этом примере мы сначала включили вставку идентификаторов, затем вставили строку с явным значением для столбца идентификаторов и, наконец, отключили вставку идентификаторов.
Ниже показаны данные таблицы акций после вставки:
SELECT * FROM sales.promotions;

В этом руководстве вы узнали, как использовать оператор SQL Server INSERT для добавления новой строки в таблицу.




