Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya_rabota.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
401.45 Кб
Скачать

Выполненные задания

2. В приложении реализовать не менее пяти запросов, включая (для демонстрации навыков работы)

a) Составной многотабличный запрос с параметром, включающий соединение таблиц и CASE-выражение;

b) Запрос, содержащий коррелированные и некоррелированные подзапросы в разделах SELECT, FROM и WHERE (в каждом хотя бы по одному);

SELECT katalog.name

FROM katalog

WHERE raspologenie = 'C:'

c) Многотабличный запрос, содержащий группировку записей, агрегативные функции и параметр, используемый в разделе HAVING;

-- Список тарифов, стоимость которых превышает 400 копеек

SELECT katalog.name id_tip FROM katalog,tip

GROUP BY id_tip, id_katalog,katalog.name

HAVING COUNT(id_katalog) =id_tip;

d) Запрос, содержащий предикат ANY, SOME или ALL;

SELECT katalog.name FROM katalog

WHERE id_katalog = ANY (SELECT id_katalog FROM soderganie);

4. В таблице (в соответствии с вариантом) предусмотреть поле, которое заполняется автоматически по срабатыванию триггера при добавлении, обновлении и удалении данных, иметь возможность продемонстрировать работу триггера при работе приложения. Триггера должны обрабатывать только те записи, которые были добавлены, изменены или удалены в ходе текущей операции (транзакции).

CREATE TRIGGER Triggerkatalog

ON katalog

INSTEAD OF DELETE

AS

BEGIN

DECLARE @katalogId int

SELECT @katalogId = id_katalog FROM deleted;

if @katalogId IN (SELECT id_katalog FROM katalog)

BEGIN

ROLLBACK

print('Удаляемый ПО используется, удаление невозможно')

END

END

5. Операции добавления, удаления и обновления реализовать в виде хранимых процедур (с параметрами) хотя бы для одной таблицы; для остальных допустимо использовать возможности связывания полей ввода в приложении с полями БД;

CREATE PROCEDURE updatekatalog (@updateId int, @updatekatalogId INT, @updatenameId NVARCHAR(50), @updateraspologenieId NVARCHAR(MAX), @updatedirId NVARCHAR(MAX), @updatefileId NVARCHAR(MAX), @updatetip NVARCHAR(MAX), @updatefam NVARCHAR(MAX), @updatevladelecId NVARCHAR(MAX))

AS

BEGIN

UPDATE katalog

SET id_katalog = @updatekatalogId, name = @updatenameId, raspologenie = @updateraspologenieId, dir = @updatedirId, [FILE] = @updatefileId, id_tip=@updatetip, id_vladelec = @updatevladelecId

WHERE id_katalog = @updateId;

END

6. Реализовать отдельную хранимую процедуру, состоящую из нескольких отдельных операций в виде единой транзакции, которая при определенных условиях может быть зафиксирована или откатана;

CREATE PROCEDURE soderg(@id_soderg INT, @dir nvarchar(50), @file nvarchar(50))

AS

BEGIN

BEGIN TRANSACTION

INSERT INTO soderganie(id_soderg, dir,[file]) VALUES(@id_soderg, @dir, @file);

IF @dir=@file

ROLLBACK

COMMIT TRANSACTION

END

7. В триггере или хранимой процедуре реализовать курсор на обновления отдельных данных;

CREATE PROCEDURE updatekatalog (@updateId int, @updatename nvarchar(50), @updateraspologenie NVARCHAR(50))

AS

BEGIN

DECLARE my_cursor CURSOR

FOR SELECT ID FROM Tariffs;

OPEN my_cursor

DECLARE @id INT;

FETCH NEXT FROM my_cursor INTO @id;

WHILE @@FETCH_STATUS = 0

BEGIN

IF @updateId = @id

UPDATE katalog

SET id_katalog = 0

,name = ''

,raspologenie = ''

WHERE id_katalog = @updateId;

FETCH NEXT FROM my_cursor INTO @id;

END

CLOSE my_cursor;

DEALLOCATE my_cursor;

END

8. Распределение прав пользователей: предусмотреть не менее двух пользователей с разным набором привилегий. Каждый набор привилегий оформить в виде роли.

CREATE LOGIN [Admin] WITH PASSWORD=N'''1234321123321',

DEFAULT_DATABASE=[test123], DEFAULT_LANGUAGE=[русский], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

EXEC sys.sp_addsrvrolemember @loginame = N'Admin', @rolename = N'sysadmin'

GO

ALTER LOGIN [Admin] DISABLE

GO

CREATE LOGIN [USER] WITH PASSWORD=N'123456',

DEFAULT_DATABASE=[test123], DEFAULT_LANGUAGE=[русский], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

ALTER LOGIN [User] DISABLE

GO

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]