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

курсач / Наволоцкий_1302_v2

.pdf
Скачиваний:
0
Добавлен:
27.12.2025
Размер:
2.69 Mб
Скачать

============================================================

====== */

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;

111

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

112

/*

============================================================

======

ЭТАП 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"

113

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();

114

-- Попытка 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

115

Install_DB.bat:

@echo off

echo Installing CircuitDB...

echo.

echo 1. Creating Structure...

sqlcmd -S .\SQLEXPRESS -E -i "01_CreateStructure.sql"

echo 2. Inserting Data...

sqlcmd -S .\SQLEXPRESS -E -i "02_InsertData.sql"

echo 3. Creating Procedures...

sqlcmd -S .\SQLEXPRESS -E -i "03_Procedures.sql"

echo 4. Creating Views and Functions...

sqlcmd -S .\SQLEXPRESS -E -i "04_ViewsAndFunctions.sql"

echo 5. Configuring Security...

sqlcmd -S .\SQLEXPRESS -E -i "05_SecurityAndAdmin.sql"

echo.

echo Installation Complete! pause

116

AutoBackup.bat:

sqlcmd -S .\SQLEXPRESS -E -Q "BACKUP DATABASE CircuitDB TO

DISK='C:\Program Files (x86)\Microsoft SQL

Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\CircuitDB_Auto.bak'

WITH INIT"

117

Соседние файлы в папке курсач