Created
March 3, 2025 23:22
-
-
Save Vladislav-Melenchuk/e8d0d999bd7535831701fc898f23fb4b to your computer and use it in GitHub Desktop.
HW_9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1. Написать хранимую процедуру, которая показывает общее количество проданных товаров в каждой из категорий и от каждого производителя. | |
CREATE PROCEDURE task1_1 | |
AS | |
BEGIN | |
SELECT c.name , pr.name , SUM(s.quantity) | |
FROM Sale s | |
JOIN Product p ON s.id_product = p.id | |
JOIN Category c ON p.id_category = c.id | |
JOIN Producer pr ON p.id_producer = pr.id | |
GROUP BY c.name, pr.name | |
END | |
3. Написать хранимую процедуру, которая показывает список производителей и общее количество товаров, произведённых каждым из них. | |
CREATE PROCEDURE Task1_2 | |
AS | |
BEGIN | |
SELECT pr.name AS Producer, COUNT(*) AS TotalProducts | |
FROM Product p | |
JOIN Producer pr ON p.id_producer = pr.id | |
GROUP BY pr.name | |
END | |
4. Создать хранимую процедуру, которая показывает название продукта, который был продан в максимальном количестве. | |
CREATE PROCEDURE task1_3 | |
AS | |
BEGIN | |
SELECT TOP 1 p.name, SUM(s.quantity) | |
FROM Sale s | |
JOIN Product p ON s.id_product = p.id | |
GROUP BY p.name | |
END | |
------- | |
1. При продаже товара (добавлении записи в таблицу Sale), его количество должно уменьшаться (в таблице Product) . | |
CREATE TRIGGER task2_1 | |
ON Sale | |
AFTER INSERT | |
AS | |
BEGIN | |
UPDATE p | |
SET p.quantity = p.quantity - i.quantity | |
FROM Product p | |
JOIN inserted i ON p.id = i.id_product | |
END | |
2. Нельзя продать товар, которого нет на складе магазина (по количеству). | |
CREATE TRIGGER netynasklade | |
ON Sale | |
INSTEAD OF INSERT | |
AS | |
BEGIN | |
IF EXISTS ( | |
SELECT 1 FROM inserted i | |
JOIN Product p ON i.id_product = p.id | |
WHERE p.quantity < i.quantity | |
) | |
BEGIN | |
RAISERROR ('Недостаточно товара на складе!', 16, 1) | |
ROLLBACK | |
END | |
ELSE | |
BEGIN | |
INSERT INTO Sale (id_product, quantity, price, date_of_sale) | |
SELECT id_product, quantity, price, date_of_sale FROM inserted | |
END | |
END | |
3. Нельзя продать больше 100 единиц одного товара одному покупателю. | |
CREATE TRIGGER task3 | |
ON Sale | |
INSTEAD OF INSERT | |
AS | |
BEGIN | |
IF EXISTS ( | |
SELECT 1 FROM inserted WHERE quantity > 100 | |
) | |
BEGIN | |
RAISERROR ('Нельзя продать более 100 единиц одного товара!', 16, 1) | |
ROLLBACK | |
END | |
ELSE | |
BEGIN | |
INSERT INTO Sale (id_product, quantity, price, date_of_sale) | |
SELECT id_product, quantity, price, date_of_sale FROM inserted | |
END | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment