Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсач / Demo_Presentation

.sql
Скачиваний:
0
Добавлен:
27.12.2025
Размер:
5.64 Кб
Скачать
/* =================================================================================
ДЕМОНСТРАЦИЯ ВОЗМОЖНОСТЕЙ СИСТЕМЫ (DEMO)
================================================================================= */

USE CircuitDB;
GO

PRINT '=============================================================';
PRINT 'ЗАПУСК ДЕМОНСТРАЦИИ';
PRINT 'Время: ' + CONVERT(VARCHAR(30), GETDATE(), 120);
PRINT '=============================================================';
GO

/* ==================================================================
ЭТАП 1: СЛОЖНЫЕ ПРЕДСТАВЛЕНИЯ (VIEWS)
Демонстрация аналитики, CTE, Group By и Having
================================================================== */
PRINT '--- ЭТАП 1: ПРОСМОТР ОТЧЕТОВ ---';

USE CircuitDB;
GO

-- 1.1. Полный отчет (INNER JOIN 4 таблиц)
-- Добавляем GETDATE(), чтобы видеть время генерации прямо в таблице
SELECT TOP 5
*,
GETDATE() AS [ReportTime]
FROM [Stock].[v_FullComponentReport];

-- 1.2. Инженерный отчет (Фильтр по SPICE моделям)
SELECT
*,
GETDATE() AS [ReportTime]
FROM [Stock].[v_ActiveComponentsSpiceready];

-- 1.3. СЛОЖНАЯ АНАЛИТИКА (CTE + HAVING)
-- Показывает процент активных компонентов по категориям
SELECT
*,
GETDATE() AS [ReportTime]
FROM [Stock].[v_CategoryAnalytics];
GO
/* ==================================================================
ЭТАП 2: ПОИСК И ДИНАМИЧЕСКИЕ ДАННЫЕ
Демонстрация генерации даты "на лету" и работы индексов
================================================================== */
USE CircuitDB;
GO
PRINT '--- ЭТАП 2: ПОИСК ДАННЫХ ---';

-- 2.1. Поиск по части названия (Артикулу)
EXEC [Stock].[usp_SearchComponents] @Keyword = '555';

-- 2.2. Поиск по производителю (Используем ID из справочника Ref)
-- (Например, Texas Instruments = 1)
EXEC [Stock].[usp_SearchComponents] @ManufacturerID = 1;

GO

/* ==================================================================
ЭТАП 3: СОЗДАНИЕ ДАННЫХ (ТРАНЗАКЦИИ)
Демонстрация вставки с проверкой (TRY...CATCH)
================================================================== */
USE CircuitDB;
GO
PRINT '--- ЭТАП 3: СОЗДАНИЕ КОМПОНЕНТА ---';

DECLARE @NewID INT;
DECLARE @ManufID INT, @CatID INT, @PackID INT;

-- Получаем ID из справочников схемы [Ref]
SELECT TOP 1 @ManufID = ManufacturerID FROM [Ref].[Manufacturers];
SELECT TOP 1 @CatID = CategoryID FROM [Ref].[Categories];
SELECT TOP 1 @PackID = PackageID FROM [Ref].[PackageTypes];

-- Вызываем процедуру создания
EXEC [Stock].[usp_CreateComponent]
@PartNumber = 'DEMO-CHIP-FINAL',
@ManufacturerID = @ManufID,
@CategoryID = @CatID,
@PackageID = @PackID,
@Description = 'Создано на защите с использованием Транзакции',
@NewID = @NewID OUTPUT;

-- Проверяем результат
SELECT *, GETDATE() AS [ReportTime] FROM [Stock].[Components] WHERE ComponentID = @NewID;
GO

/* ==================================================================
ЭТАП 4: СЛОЖНЫЕ ФУНКЦИИ (UDF)
Демонстрация Multi-Statement Table-Valued Function
================================================================== */
PRINT '--- ЭТАП 4: ФУНКЦИИ (Data Quality Analysis) ---';

-- 4.1. Простая табличная функция (Параметры компонента)
USE CircuitDB;
GO
DECLARE @CompID INT = (SELECT TOP 1 ComponentID FROM [Stock].[Components]);
SELECT * FROM [Stock].[udf_GetComponentParams](@CompID);

-- 4.2. СЛОЖНАЯ функция (Расчет баллов качества заполнения)
-- Анализируем категорию 1 (Операционные усилители)
-- Функция сама считает баллы и выносит вердикт (Excellent/Poor)
USE CircuitDB;
GO
SELECT * FROM [Stock].[udf_GetComponentQualityReport](1);
GO

/* ==================================================================
ЭТАП 5: XML ИМПОРТ/ЭКСПОРТ
Демонстрация интеграции
================================================================== */
PRINT '--- ЭТАП 5: XML ОПЕРАЦИИ ---';

-- 5.1. Экспорт
USE CircuitDB;
GO
EXEC [Stock].[usp_ExportReportToXML];

SELECT GETDATE() AS [ReportTime]

-- 5.2. Импорт
-- Имитируем файл, пришедший от поставщика
USE CircuitDB;
GO
DECLARE @MyXML XML;
SET @MyXML = '
<CircuitReport>
<Component
Article="XML-IMPORT-TEST"
Manufacturer="Vishay"
Category="Resistors"
Package="0603"
Description="Loaded via XML Transaction"
/>
</CircuitReport>';

EXEC [Stock].[usp_ImportComponentsFromXML] @XmlData = @MyXML;

-- Проверка
SELECT TOP 1 * FROM [Stock].[Components] ORDER BY ComponentID DESC;
GO
SELECT GETDATE() AS [ReportTime]

/* ==================================================================
ЭТАП 6: БЕЗОПАСНОСТЬ (SCHEMAS)
Демонстрация запрета доступа
================================================================== */
PRINT '--- ЭТАП 6: ПРОВЕРКА БЕЗОПАСНОСТИ ---';
USE CircuitDB;
GO

-- 6.1. Заходим как МЕНЕДЖЕР (У него права только на чтение)
EXECUTE AS USER = 'Manager';
PRINT '>> Текущий пользователь: ' + USER_NAME();

-- Попытка 1: Удалить таблицу (Должна быть ошибка)
BEGIN TRY
DROP TABLE [Ref].[Manufacturers];
END TRY
BEGIN CATCH
PRINT 'ОШИБКА ДОСТУПА: ' + ERROR_MESSAGE();
END CATCH

-- Попытка 2: Создать компонент (Должна быть ошибка - нет прав EXECUTE)
BEGIN TRY
DECLARE @Dummy INT;
EXEC [Stock].[usp_CreateComponent] 'HACK', 1, 1, 1, 'Test', @Dummy;
END TRY
BEGIN CATCH
PRINT 'ОШИБКА ДОСТУПА: ' + ERROR_MESSAGE();
END CATCH

REVERT; -- Возвращаемся в админа
PRINT '>> Возврат к правам: ' + USER_NAME();
GO
Соседние файлы в папке курсач