Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с запросом на SQL для БД pubs

Gg Ученик (26), на голосовании 5 месяцев назад
Привет! Есть запрос:
Осуществлять продажу изданий магазинам; Обеспечить наличие в одном заказе разных изданий в заданном количестве


 INSERT INTO sales (stor_id, ord_num, ord_date, qty, payterms, title_id) 
VALUES (@stor_id, @ord_num, @ord_date, @qty, @payterms, @title_id);

-- Обновление ytd_sales в таблице titles
UPDATE titles
SET ytd_sales = ytd_sales + @qty
WHERE title_id = @title_id;
Но обиспечивается ли наличие в одном заказе разных изданий в заданном количестве?
Диаграмма бд:
Голосование за лучший ответ
olimchik Мастер (1233) 6 месяцев назад
В данном запросе вставка данных в таблицу 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.

Если вам нужно обрабатывать большое количество изданий, то можно использовать курсор или другой способ динамического формирования запросов.
Похожие вопросы