Лабораторные работы №1-2
.docxОглавление
Лабораторная работа №1 1
Упражнение 1 1
Упражнение 2 3
Архитектурная модель решения задачи 3
Лабораторная работа №2 4
Упражнение 1 4
Упражнение 2 6
Архитектурная модель решения задачи 9
Лабораторная работа №1
Упражнение 1
Руководство железнодорожной станции в одном из городов ведёт отчётность пассажирам, которые прибыли на станцию. Однако в результате несчастного случая, данные были удалены. Так как отчётный период подходит к концу, данные нужны срочно. Информация о пассажирах хранится в центральном офисе в другом городе. В силу срочности необходимо использовать нерегламентированный запрос.
По умолчанию нерегламентированные запросы запрещены. Для того чтобы их использовать необходимо включить их в разделе Аспекты:
Код запроса:
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=LAPTOP-NN3TIUA3;Trusted_Connection=yes;',
'SELECT b.[Регистрационный номер],[ФИО пассажира] FROM [Железнодорожная касса].dbo.Пассажир b
inner join [Железнодорожная касса].dbo.Билет on b.[Регистрационный номер]=Билет.[Регистрационный номер] where [Номер поезда]=126') AS a;
Результат:
После выполнения запроса для соблюдения норм безопасности возможность использования нерегламентированных запросов следует отключить:
Упражнение 2
Руководство железнодорожной станции в одном из городов ведёт отчётность по пассажирам, которые прибыли на станцию. Однако в результате несчастного случая, данные были удалены. Так как отчётный период подходит к концу, данные нужны срочно. Информация о пассажирах хранится в центральном офисе в другом городе. В силу срочности необходимо использовать нерегламентированный запрос.
Код запроса:
SELECT b.[Регистрационный номер],[ФИО пассажира],Класс
FROM OPENDATASOURCE('MSOLEDBSQL', 'Data Source=LAPTOP-NN3TIUA3;Integrated Security=SSPI')
.[Железнодорожная касса].dbo.Пассажир b
inner join OPENDATASOURCE('MSOLEDBSQL', 'Data Source=LAPTOP-NN3TIUA3;Integrated Security=SSPI').[Железнодорожная касса].dbo.Билет с on b.[Регистрационный номер]=с.[Регистрационный номер] where [Номер поезда]=228
Результат:
Архитектурная модель решения задачи
Лабораторная работа №2
Упражнение 1
Руководство железнодорожной станции ведёт отчётность о прибыльности продаж билетов в их направлении. Данные о продажах хранятся на сервере в центральном офисе в другом городе. Так как отчёты необходимо составлять каждый месяц, необходим связанный сервер.
Чтобы установить связь с сервером центрального офиса необходимо создать связанный сервер, для этого нужно совершить правый щелчок мыши по «Объекты сервера», в появившемся меню выбрать «Создать» и затем «Связанный сервер…».
В диалоговом окне «Создание связанного сервера» необходимо ввести имя создаваемого связанного сервера, и в списке переключателей «Тип сервера» выбрать положение «Сервер SQL Server».
Далее на вкладке «Безопасность» в списке переключателей «Соединения для имен, отсутствующих в списке выше» необходимо выбрать положение «Устанавливать с использованием текущего контекста безопасности имени входа».
После этого нажимаем кнопку «ОК».
Код запроса:
select [Название поезда] as Направление,sum([Цена билета]) as Прибыль
from [LAPTOP-NN3TIUA3].[Железнодорожная касса].dbo.Поезд p
inner join [LAPTOP-NN3TIUA3].[Железнодорожная касса].dbo.Билет b on
b.[Номер поезда]=p.[Номер поезда]
where b.[Номер поезда]=126 and Datepart(Month,b.[Дата отправления])=03
group by [Название поезда]
Результат:
Упражнение 2
Руководство железнодорожной станции ведёт отчётность о прибыльности продаж билетов в их направлении от каждого пассажира. Данные о продажах хранятся на сервере в центральном офисе в другом городе. Так как отчёты необходимо составлять каждый месяц, необходим связанный сервер с использованием вызовов удалённых процедур (RPC).
По умолчанию использование RPC отключено, эту функцию можно включить 2 способами:
1. Необходимо подключится к серверу клиента и выполнить следующий код Transact-SQL:
Exec master.dbo.sp_serveroption @server=N'LAPTOP-NN3TIUA3',@optname=N'rpc',
@optvalue=N'true'
go
Exec master.dbo.sp_serveroption @server=N'LAPTOP-NN3TIUA3',@optname=N'rpc out',
@optvalue=N'true'
Go
2. В разделе «Аспекты» связанного сервера необходимо изменить значение полей «Rpc» и «RpcOut» с false на true:
Код хранимой процедуры:
create procedure Pass_prib
@c smallint
as
select [ФИО Пассажира],[Название поезда] as Направление,sum([Цена билета]) as Прибыль
from Поезд
inner join Билет on
Билет.[Номер поезда]=Поезд.[Номер поезда]
inner join Пассажир on
Билет.[Регистрационный номер]=Пассажир.[Регистрационный номер]
where Билет.[Номер поезда]=126 and Datepart(Month,[Дата отправления])=@c
group by [Название поезда],[ФИО пассажира]
go
Код запроса:
exec [LAPTOP-NN3TIUA3].[Железнодорожная касса].dbo.Pass_prib 03
Результат:
После выполнения запроса для соблюдения норм безопасности возможность использования RPC следует отключить, это также можно выполнить 2 способами:
1. Необходимо подключится к серверу клиента и выполнить следующий код Transact-SQL:
Exec master.dbo.sp_serveroption @server=N'LAPTOP-NN3TIUA3',@optname=N'rpc',
@optvalue=N'false'
go
Exec master.dbo.sp_serveroption @server=N'LAPTOP-NN3TIUA3',@optname=N'rpc out',
@optvalue=N'false'
Go
2. В разделе «Аспекты» связанного сервера необходимо изменить значение полей «Rpc» и «RpcOut» с true на false:
Архитектурная модель решения задачи