AdoNetShop/database/06_test.sql

82 lines
3.0 KiB
Transact-SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 06_test.sql
-- Проверочные запросы: выполните вручную после скриптов 01-05.
-- Скрипт ничего не ломает: он только читает данные и показывает,
-- какие ошибки ожидаются при нарушении ограничений.
USE [AdoNetShop];
GO
-- ============ Таблицы ============
SELECT * FROM Categories;
SELECT * FROM Products;
SELECT * FROM Customers;
SELECT * FROM Orders;
SELECT * FROM OrderItems;
-- ============ Примеры запросов, которые выполняет приложение ============
-- 1. Все товары (демонстрация SqlDataReader)
SELECT Id, Name, Description, Price, StockQuantity, CategoryId
FROM Products;
GO
-- 2. Один товар по Id (демонстрация параметризованного SqlCommand).
-- Id берём из таблицы, чтобы скрипт работал после любого числа перезапусков.
DECLARE @Id INT = (SELECT MIN(Id) FROM Products);
SELECT Id, Name, Description, Price, StockQuantity, CategoryId
FROM Products
WHERE Id = @Id;
GO
-- 3. Товары вместе с названиями категорий (JOIN)
SELECT p.Id, p.Name, p.Price, p.StockQuantity, c.Name AS CategoryName
FROM Products p
JOIN Categories c ON p.CategoryId = c.Id
ORDER BY p.Name;
GO
-- ============ Проверка хранимых процедур ============
-- Все товары
EXEC dbo.GetProducts;
GO
-- Товары только первой категории
DECLARE @CatId INT = (SELECT MIN(Id) FROM Categories);
EXEC dbo.GetProducts @CategoryId = @CatId;
GO
-- Один товар
DECLARE @Id2 INT = (SELECT MIN(Id) FROM Products);
EXEC dbo.GetProductById @ProductId = @Id2;
GO
-- Успешное изменение цены
DECLARE @Id3 INT = (SELECT MIN(Id) FROM Products);
EXEC dbo.UpdateProductPrice @ProductId = @Id3, @NewPrice = 1450.00;
SELECT Id, Name, Price FROM Products WHERE Id = @Id3;
GO
-- Ожидается ошибка: цена должна быть > 0 (RAISERROR внутри процедуры).
-- Снимите комментарий со следующей строки, чтобы увидеть ошибку:
-- EXEC dbo.UpdateProductPrice @ProductId = 1, @NewPrice = -10.00;
GO
-- ============ Проверка ограничений (CHECK) ============
-- Ожидается ошибка CHECK: Price > 0
-- INSERT INTO Products (Name, Price, StockQuantity, CategoryId)
-- VALUES (N'Тестовый товар', -5, 1, 1);
GO
-- Ожидается ошибка CHECK: StockQuantity >= 0
-- UPDATE Products SET StockQuantity = -1 WHERE Id = 1;
GO
-- ============ Проверка целостности связей (FOREIGN KEY) ============
-- Ожидается ошибка FOREIGN KEY: категории 999 не существует
-- INSERT INTO Products (Name, Price, StockQuantity, CategoryId)
-- VALUES (N'Товар без категории', 100, 1, 999);
GO