В данном запросе вставка данных в таблицу sales и обновление таблицы titles обеспечивают добавление одной записи о продаже. Чтобы гарантировать наличие в одном заказе разных изданий в заданном количестве, необходимо убедиться, что выполняется вставка нескольких строк с разными title_id, но с одинаковым ord_num. Это можно сделать, например, с помощью цикла или нескольких отдельных инструкций INSERT.
Предположим, что у нас есть данные для нескольких изданий, которые мы хотим добавить в один заказ. Мы можем использовать транзакцию, чтобы гарантировать, что все вставки и обновления будут выполнены атомарно:
BEGIN TRANSACTION;
-- Пример для нескольких изданий в одном заказе
DECLARE @ord_num VARCHAR(20) = '12345';
DECLARE @stor_id CHAR(4) = 'S1';
DECLARE @ord_date DATETIME = GETDATE();
DECLARE @payterms VARCHAR(12) = 'Net 30';
-- Вставка для первого издания
DECLARE @title_id1 CHAR(6) = 'T1';
DECLARE @qty1 INT = 5;
INSERT INTO sales (stor_id, ord_num, ord_date, qty, payterms, title_id)
VALUES (@stor_id, @ord_num, @ord_date, @qty1, @payterms, @title_id1);
UPDATE titles
SET ytd_sales = ytd_sales + @qty1
WHERE title_id = @title_id1;
-- Вставка для второго издания
DECLARE @title_id2 CHAR(6) = 'T2';
DECLARE @qty2 INT = 10;
INSERT INTO sales (stor_id, ord_num, ord_date, qty, payterms, title_id)
VALUES (@stor_id, @ord_num, @ord_date, @qty2, @payterms, @title_id2);
UPDATE titles
SET ytd_sales = ytd_sales + @qty2
WHERE title_id = @title_id2;
-- Вставка для третьего издания
DECLARE @title_id3 CHAR(6) = 'T3';
DECLARE @qty3 INT = 7;
INSERT INTO sales (stor_id, ord_num, ord_date, qty, payterms, title_id)
VALUES (@stor_id, @ord_num, @ord_date, @qty3, @payterms, @title_id3);
UPDATE titles
SET ytd_sales = ytd_sales + @qty3
WHERE title_id = @title_id3;
COMMIT TRANSACTION;
В этом примере мы создаем один заказ с номером @ord_num, содержащий три разных издания. Каждое издание добавляется отдельной инструкцией INSERT с одинаковым номером заказа, но разными title_id и количеством. После каждой вставки обновляется соответствующая запись в таблице titles.
Если вам нужно обрабатывать большое количество изданий, то можно использовать курсор или другой способ динамического формирования запросов.
Осуществлять продажу изданий магазинам; Обеспечить наличие в одном заказе разных изданий в заданном количестве
Но обиспечивается ли наличие в одном заказе разных изданий в заданном количестве?
Диаграмма бд: