
- •Содержание
- •Техническое задание
- •Анализ предметной области
- •1.2 Постановка задачи
- •2. Технический проект информационной системы
- •2.1 Функциональная модель
- •2.1.1 Контекстная диаграмма и диаграммы детализации процессов
- •2.1.2 Диаграмма дерева узлов
- •2.2 Информационная модель
- •2.2.1 Идентификация сущностей и связей. Er-диаграмма логического уровня.
- •2.2.2 Er-диаграмма физического уровня. Ограничения доменов. Ограничения ссылочной целостности. Переопределение триггеров. Индексирование отношений.
- •2.2.3 Определение представлений, хранимых процедур серверной компоненты. Er-диаграмма в режиме отображения представлений
- •2.3 Верификация спроектированной логической модели.
- •3. Реализация системы
- •3.1. T-sql-определения регламентированных запросов
- •3.2 T-sql-определения триггеров
- •3.3 T-sql-определения хранимых процедур
- •3.4 T-sql-определения курсоров
- •3.5 Распределение прав доступа пользователей
- •Заключение
- •Список использованных литературных источников
3.3 T-sql-определения хранимых процедур
Вся выданая зарплата – поиск информации в таблице "Зарплата";
CREATE PROCEDURE [dbo].[Вся выданая зарплата] /*Объявляем имя процедуры */
AS
BEGIN
SELECT /*Оператор выборки*/
sum(dbo.Зарплата.Зарплата) AS 'Вся выплаченая зарплата' /*Перечисляем поля, которые будут выведены в результате запроса */
FROM /*указываем имя таблицы из которых выбираются записи*/dbo.Зарплата
END
Вывести общую сумму задолжености по фамилии – поиск информации в таблице "Должники";
CREATE PROCEDURE [dbo].[Вывести общую сумму задолжености по фамилии] /*Объявляем имя процедуры */
@Family nvarchar(40) /*Объявляем переменные*/
AS
BEGIN
SELECT /*Оператор выборки*/
SUM(dbo.Должники.Задолженость) AS 'Сумма задолжност',
SUM(dbo.Должники.Пеня) AS 'Сумма пени',
(SUM(dbo.Должники.Задолженость)+SUM(dbo.Должники.Пеня)) AS 'Общая сумма' /*Перечисляем поля, которые будут выведены в результате запроса */
FROM /*указываем имена таблиц из которых выбираются записи*/ dbo.Должники, dbo.Квартиросъемщики
WHERE dbo.Должники.[Номер квартиросъемщика]= dbo.Квартиросъемщики.[Номер квартиросъемщика]
AND dbo.Квартиросъемщики.Фамилия=@Family /*находим записи, где фамилия соответствует введенному параметру @Family */
END
Вывод данных о договорах определнного дома – поиск информации в таблице "Дома на обслуживании";
CREATE PROCEDURE [dbo].[Вывод данных об договорах определнного дома (DATENAME)]
@kod_doma int
AS
BEGIN
SELECT dbo.Квартиросъемщики.Фамилия,
[Дома на обслуживании].Адрес,
Договор.[Номер квартиры],
Услуги.[Название услуги],
DATENAME(MONTH,Договор.Начало ) AS 'Начала договора',
DATENAME(yy,Договор.Начало ) AS 'Начала договора',
DATENAME(MONTH,Договор.Конец ) AS 'Конец договора',
DATENAME(yy,Договор.Конец ) AS 'Конец договора'
FROM [Дома на обслуживании], Услуги, Договор,dbo.Квартиросъемщики, Квартиры
WHERE [Дома на обслуживании].[Код дома]=@kod_doma
AND [Дома на обслуживании].[Код дома]=Договор.[Код дома]
AND dbo.Квартиросъемщики.[Номер квартиросъемщика]=Квартиры.[Номер квартиросъемщика]
AND Договор.[Номер квартиры]=Квартиры.[Номер квартиры]
AND Услуги.[Номер услуги]=Договор.[Номер услуги] /*находим записи, где Код дома соответствует введенному параметру @kod_doma */
END
Выдать адреса домом по жилой площади – поиск информации в таблице "Дома на обслуживании";
CREATE PROCEDURE [dbo].[Выдать адреса домом по жилой площади]
@Jil_plosh int
AS BEGIN
SELECT dbo.[Дома на обслуживании].Адрес FROM dbo.[Дома на обслуживании]
WHERE dbo.[Дома на обслуживании].[Жилая площадь]>@Jil_plosh
END /*находим записи, где Жилая площадь больше введенного параметра @ Jil_plosh */
Выдача квартиросъемщиков по первой букве - поиск информации в таблице "Квартиросъемщики";
CREATE PROCEDURE [dbo].[Выдача квартиросъемщиков по первой букве (LEFT)]
@Symbol nvarchar(1)
AS BEGIN
SELECT *FROM dbo.Квартиросъемщики
WHERE LEFT(dbo.Квартиросъемщики.Фамилия,1)=@Symbol /*находим записи с помощью функции Left, первая буква Фамилии квартиросъемщика равна введеноому параметру @Symbol */
END
Выдача кол-во рабочих по должносстям по отделу- поиск информации в таблице "Сотрудники";
CREATE PROCEDURE [dbo].[Выдача кол-во рабочих по должносстям по отделу+(count)]
@otdel int
AS BEGIN
SELECT DISTINCT dbo.Сотрудники.Должность, COUNT(dbo.Сотрудники.Должность) AS 'Кол-во рабочих по должности' /*считаем количество сотрудников функцией count*/
FROM dbo.Сотрудники
WHERE dbo.Сотрудники.[Номер отдела]=@otdel /*находим записи, где Номер отдела равен введенному параметру @otdel */
GROUP BY dbo.Сотрудники.Должность /*группируем сотрудников по полю Должность */
END
Изменение жилищных условий - изменение информации в таблице "Квартиросъемщики";
CREATE PROCEDURE [dbo].[Изменение жилищных условий] /*Объявляем имя процедуры */
@Family nvarchar(40) /*Объявляем переменные*/
AS
BEGIN
IF EXISTS (SELECT * FROM dbo.Квартиросъемщики
WHERE dbo.Квартиросъемщики.[Жилищные условия]='Не нуждаются'
AND dbo.Квартиросъемщики.Фамилия=@Family)
UPDATE /*Оператор обновления*/
/*Указываем таблицу, где обновляем запись*/ dbo.Квартиросъемщики SET dbo.Квартиросъемщики.[Жилищные условия]='Нуждаются' /*Указываем какое поле обновится запись*/
WHERE dbo.Квартиросъемщики.Фамилия=@Family/*При условии что введенная фамилия соответсвует фамилии в таблице*/
END
Кол-во заявок за выбраный период - поиск информации в таблице "Заявки";
CREATE PROCEDURE [dbo].[Кол-во заявок за выбраный период]
@Param1 datetime,
@Param2 datetime
AS BEGIN
SELECT COUNT(dbo.Заявки.[Код заявки]) AS 'Колво заявок за выбраный период'
FROM dbo.Заявки
WHERE dbo.Заявки.[Дата подачи заявки]
BETWEEN @Param1 AND @Param2 /*выбираем записи, где Дата подачи заявки лежит в промежутке от @Param1 до @Param2 */
END
Кол-во энергии за выбранный период - поиск информации в таблице "Данные со счетчиков";
CREATE PROCEDURE [dbo].[Кол-во энергии за выбранный период] @date1 datetime,
@date2 datetime
AS
BEGIN
SELECT dbo.Квартиросъемщики.Фамилия,
MAX(dbo.[Данные со счетчиков].Электроэнергия) AS 'Кол-во использованой энергии за выбранный период'
FROM dbo.[Данные со счетчиков],dbo.Квартиросъемщики
WHERE dbo.[Данные со счетчиков].[Номер квартиросъемщика]= dbo.Квартиросъемщики.[Номер квартиросъемщика]
AND
dbo.[Данные со счетчиков].Дата BETWEEN @date1 AND @date2 /*выбираем записи, где Дата лежит в промежутке от @data1 до @data2 */
GROUP BY dbo.Квартиросъемщики.Фамилия /* группируем записи по фамилии квартиросъемщика */
ORDER BY MAX(dbo.[Данные со счетчиков].Электроэнергия) /*сортируем записи по возрастанию Элетроэнергии */
END
Количество n-комнатных квартир - поиск информации в таблице "Дома";
CREATE PROCEDURE [dbo].[Количество n-комнатных квартир]
@Kol_komnat int
AS BEGIN
SELECT COUNT(dbo.Квартиры.[Код дома]) AS 'Кол-во домов' /*считаем количество домов функцией count */
FROM dbo.Квартиры
WHERE dbo.Квартиры.[Колличество комнат]=@Kol_komnat /*выбираем записи, где Количество комнат равно введенному параметру @Kol_komnat */
END
Обновление статуса выбраной заявки – изменение информации в таблице "заявки";
CREATE PROCEDURE [dbo].[Обновление статуса выбраной заявки] /*Объявляем имя процедуры */
@KOD int /*Объявляем переменные*/
AS
BEGIN
UPDATE dbo.Заявки /*Оператор обновления*/
SET dbo.Заявки.[Дата исполнения]=(SELECT GETDATE()), dbo.Заявки.Результат='Готово' /*Указываем таблицу, где обновляем запись*/
WHERE dbo.Заявки.Результат='В процессе' AND dbo.Заявки.[Код заявки]=@KOD /*При условии что результат этой записи будет равен ‘В процессе’ и код заявки будет равен введенному коду */
END
Поиск квартиросъемщика по фамилии – поиск информации в таблице "Квартиросъемщики";
CREATE PROCEDURE [dbo].[Поиск квартиросъемщика по фамилии]
@char nvarchar(40)
AS BEGIN
SELECT * FROM dbo.Квартиросъемщики
WHERE CHARINDEX(@char, dbo.Квартиросъемщики.Фамилия)>0
/*выбираем записи, где Фамилия квартиросъемщика совпадает с введенным параметром @char( проверка осуществляется функцией Charindex) */
END
Поиск сотрудников по отделу – поиск информации в таблице "Сотрудники";
CREATE PROCEDURE [dbo].[Поиск сотрудников по отделу]
@Otdel int
AS BEGIN
SELECT * FROM dbo.Сотрудники WHERE dbo.Сотрудники.[Номер отдела]=@Otdel /*выбираем записи, номер отдела совпадает с введенным параметром @Otdel */
END
Показать договора с определенной услугой - поиск информации в таблице "Договора";
CREATE PROCEDURE [dbo].[Показать договора с определенной услугой]
@numberServ int
AS BEGIN
IF EXISTS(SELECT * FROM dbo.Договор WHERE [Номер услуги]= @numberServ ) /*проверяем существование записей у которых Номер услуги совпадает с введенным параметром @numberServ */
SELECT * FROM dbo.Договор
WHERE dbo.Договор.Конец <(SELECT GETDATE()) /*выбираем записи, где конец договора меньше текущей даты */
END
Показать заявки поданые за последние n дней - поиск информации в таблице "Заявки";
CREATE PROCEDURE [dbo].[Показать заявки поданые за последние n дней)]
@day int
AS BEGIN
SELECT * FROM dbo.Заявки WHERE dbo.Заявки.[Дата подачи заявки]>(SELECT DATEADD([DAY], -@day, GETDATE()))/*выбираем записи, где Дата подачи заявки больше лежит в промежутке от текущей даты до даты, введенной параметром @day */
END
Поиск поданных заявок по фамилии - поиск информации в таблице "Заявки";
CREATE PROCEDURE [dbo].[Поиск сотрудников по отделу] /*Объявляем имя процедуры */
@Otdel int /*Объявляем переменные*/
AS
BEGIN
SELECT /*оператор выборки*/ *
FROM /*указываем имена таблиц из которых выбираются записи*/ dbo.Сотрудники WHERE dbo.Сотрудники.[Номер отдела]=@Otdel
END /*При условии что номер сотрудника будет равен введенному номеру*/
Самая дешовая услуга - поиск информации в таблице "Услуги";
CREATE PROCEDURE [dbo].[Самая дешовая услуга]
AS BEGIN
SELECT Услуги.[Название услуги],dbo.Услуги.[Стоимость услуги]
FROM dbo.Услуги
WHERE dbo.Услуги.[Стоимость услуги]=
(SELECT min(dbo.Услуги.[Стоимость услуги]) AS 'Самая дешовая услуга' /*выбираем записи, стоимость услуги равна минимальной стоимости услуги (минимальная стоимость определяется в подзапросе функцией min) */
FROM dbo.Услуги)
Список должников со средней задолжностью выше заданной - поиск информации в таблице "Должники";
CREATE PROCEDURE [dbo].[Список должников со средней задолжностью выше заданой]
@chislo int
AS BEGIN
SELECT dbo.Квартиросъемщики.Фамилия, avg(dbo.Должники.Задолженость) AS 'Средняя задолжность'
FROM dbo.Квартиросъемщики, dbo.Должники
WHERE dbo.Квартиросъемщики.[Номер квартиросъемщика]=dbo.Должники.[Номер квартиросъемщика]
GROUP BY dbo.Квартиросъемщики.Фамилия /*группируем записи по фамилии */
HAVING avg(dbo.Должники.Задолженость) > @chislo /*выбираем записи,где средняя задолженность больше введенного параметра @chislo (средняя задолженность считается функцией avg) */
END
Список сотрудников старше выбраной даты - поиск информации в таблице "Сотрудники";
CREATE PROCEDURE [dbo].[Список сотрудников старше выбраной даты]
@date datetime
AS BEGIN
SELECT * FROM dbo.Сотрудники
WHERE dbo.Сотрудники.[Дата рождения] < @date /*выбираем записи, где Дата рождения сотрудника меньше введенного параметра @date */ END
Услуги, цена которой выше заданной - поиск информации в таблице "Услуги";
CREATE PROCEDURE [dbo].[Услуги, цена которой выше заданой] /*Объявляем имя процедуры */
@stoim int /*Объявляем переменные*/
AS
BEGIN
SELECT /*оператор выборки*/ row_number() over (Order BY Услуги.[Стоимость услуги]) 'Номер услуг отсортированых по цене', Услуги.[Название услуги], Услуги.[Стоимость услуги]
FROM /*указываем имена таблиц из которых выбираются записи*/ УСЛУГИ
WHERE Услуги.[Стоимость услуги]>@stoim /*При условии что стоимость услуги больше введенной стоимости*/
ORDER BY Услуги.[Название услуги] /*Сортируем выбранные записи*/
END