Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка по курсовому проекту ББД.doc
Скачиваний:
58
Добавлен:
29.02.2016
Размер:
861.7 Кб
Скачать

3.3 T-sql-определения хранимых процедур

  1. Вся выданая зарплата – поиск информации в таблице "Зарплата";

CREATE PROCEDURE [dbo].[Вся выданая зарплата] /*Объявляем имя процедуры */

AS

BEGIN

SELECT /*Оператор выборки*/

sum(dbo.Зарплата.Зарплата) AS 'Вся выплаченая зарплата' /*Перечисляем поля, которые будут выведены в результате запроса */

FROM /*указываем имя таблицы из которых выбираются записи*/dbo.Зарплата

END

  1. Вывести общую сумму задолжености по фамилии – поиск информации в таблице "Должники";

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

  1. Вывод данных о договорах определнного дома – поиск информации в таблице "Дома на обслуживании";

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

  1. Выдать адреса домом по жилой площади – поиск информации в таблице "Дома на обслуживании";

CREATE PROCEDURE [dbo].[Выдать адреса домом по жилой площади]

@Jil_plosh int

AS BEGIN

SELECT dbo.[Дома на обслуживании].Адрес FROM dbo.[Дома на обслуживании]

WHERE dbo.[Дома на обслуживании].[Жилая площадь]>@Jil_plosh

END /*находим записи, где Жилая площадь больше введенного параметра @ Jil_plosh */

  1. Выдача квартиросъемщиков по первой букве - поиск информации в таблице "Квартиросъемщики";

CREATE PROCEDURE [dbo].[Выдача квартиросъемщиков по первой букве (LEFT)]

@Symbol nvarchar(1)

AS BEGIN

SELECT *FROM dbo.Квартиросъемщики

WHERE LEFT(dbo.Квартиросъемщики.Фамилия,1)=@Symbol /*находим записи с помощью функции Left, первая буква Фамилии квартиросъемщика равна введеноому параметру @Symbol */

END

  1. Выдача кол-во рабочих по должносстям по отделу- поиск информации в таблице "Сотрудники";

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

  1. Изменение жилищных условий - изменение информации в таблице "Квартиросъемщики";

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

  1. Кол-во заявок за выбраный период - поиск информации в таблице "Заявки";

CREATE PROCEDURE [dbo].[Кол-во заявок за выбраный период]

@Param1 datetime,

@Param2 datetime

AS BEGIN

SELECT COUNT(dbo.Заявки.[Код заявки]) AS 'Колво заявок за выбраный период'

FROM dbo.Заявки

WHERE dbo.Заявки.[Дата подачи заявки]

BETWEEN @Param1 AND @Param2 /*выбираем записи, где Дата подачи заявки лежит в промежутке от @Param1 до @Param2 */

END

  1. Кол-во энергии за выбранный период - поиск информации в таблице "Данные со счетчиков";

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

  1. Количество n-комнатных квартир - поиск информации в таблице "Дома";

CREATE PROCEDURE [dbo].[Количество n-комнатных квартир]

@Kol_komnat int

AS BEGIN

SELECT COUNT(dbo.Квартиры.[Код дома]) AS 'Кол-во домов' /*считаем количество домов функцией count */

FROM dbo.Квартиры

WHERE dbo.Квартиры.[Колличество комнат]=@Kol_komnat /*выбираем записи, где Количество комнат равно введенному параметру @Kol_komnat */

END

  1. Обновление статуса выбраной заявки – изменение информации в таблице "заявки";

CREATE PROCEDURE [dbo].[Обновление статуса выбраной заявки] /*Объявляем имя процедуры */

@KOD int /*Объявляем переменные*/

AS

BEGIN

UPDATE dbo.Заявки /*Оператор обновления*/

SET dbo.Заявки.[Дата исполнения]=(SELECT GETDATE()), dbo.Заявки.Результат='Готово' /*Указываем таблицу, где обновляем запись*/

WHERE dbo.Заявки.Результат='В процессе' AND dbo.Заявки.[Код заявки]=@KOD /*При условии что результат этой записи будет равен ‘В процессе’ и код заявки будет равен введенному коду */

END

  1. Поиск квартиросъемщика по фамилии – поиск информации в таблице "Квартиросъемщики";

CREATE PROCEDURE [dbo].[Поиск квартиросъемщика по фамилии]

@char nvarchar(40)

AS BEGIN

SELECT * FROM dbo.Квартиросъемщики

WHERE CHARINDEX(@char, dbo.Квартиросъемщики.Фамилия)>0

/*выбираем записи, где Фамилия квартиросъемщика совпадает с введенным параметром @char( проверка осуществляется функцией Charindex) */

END

  1. Поиск сотрудников по отделу – поиск информации в таблице "Сотрудники";

CREATE PROCEDURE [dbo].[Поиск сотрудников по отделу]

@Otdel int

AS BEGIN

SELECT * FROM dbo.Сотрудники WHERE dbo.Сотрудники.[Номер отдела]=@Otdel /*выбираем записи, номер отдела совпадает с введенным параметром @Otdel */

END

  1. Показать договора с определенной услугой - поиск информации в таблице "Договора";

CREATE PROCEDURE [dbo].[Показать договора с определенной услугой]

@numberServ int

AS BEGIN

IF EXISTS(SELECT * FROM dbo.Договор WHERE [Номер услуги]= @numberServ ) /*проверяем существование записей у которых Номер услуги совпадает с введенным параметром @numberServ */

SELECT * FROM dbo.Договор

WHERE dbo.Договор.Конец <(SELECT GETDATE()) /*выбираем записи, где конец договора меньше текущей даты */

END

  1. Показать заявки поданые за последние n дней - поиск информации в таблице "Заявки";

CREATE PROCEDURE [dbo].[Показать заявки поданые за последние n дней)]

@day int

AS BEGIN

SELECT * FROM dbo.Заявки WHERE dbo.Заявки.[Дата подачи заявки]>(SELECT DATEADD([DAY], -@day, GETDATE()))/*выбираем записи, где Дата подачи заявки больше лежит в промежутке от текущей даты до даты, введенной параметром @day */

END

  1. Поиск поданных заявок по фамилии - поиск информации в таблице "Заявки";

CREATE PROCEDURE [dbo].[Поиск сотрудников по отделу] /*Объявляем имя процедуры */

@Otdel int /*Объявляем переменные*/

AS

BEGIN

SELECT /*оператор выборки*/ *

FROM /*указываем имена таблиц из которых выбираются записи*/ dbo.Сотрудники WHERE dbo.Сотрудники.[Номер отдела]=@Otdel

END /*При условии что номер сотрудника будет равен введенному номеру*/

  1. Самая дешовая услуга - поиск информации в таблице "Услуги";

CREATE PROCEDURE [dbo].[Самая дешовая услуга]

AS BEGIN

SELECT Услуги.[Название услуги],dbo.Услуги.[Стоимость услуги]

FROM dbo.Услуги

WHERE dbo.Услуги.[Стоимость услуги]=

(SELECT min(dbo.Услуги.[Стоимость услуги]) AS 'Самая дешовая услуга' /*выбираем записи, стоимость услуги равна минимальной стоимости услуги (минимальная стоимость определяется в подзапросе функцией min) */

FROM dbo.Услуги)

  1. Список должников со средней задолжностью выше заданной - поиск информации в таблице "Должники";

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

  1. Список сотрудников старше выбраной даты - поиск информации в таблице "Сотрудники";

CREATE PROCEDURE [dbo].[Список сотрудников старше выбраной даты]

@date datetime

AS BEGIN

SELECT * FROM dbo.Сотрудники

WHERE dbo.Сотрудники.[Дата рождения] < @date /*выбираем записи, где Дата рождения сотрудника меньше введенного параметра @date */ END

  1. Услуги, цена которой выше заданной - поиск информации в таблице "Услуги";

CREATE PROCEDURE [dbo].[Услуги, цена которой выше заданой] /*Объявляем имя процедуры */

@stoim int /*Объявляем переменные*/

AS

BEGIN

SELECT /*оператор выборки*/ row_number() over (Order BY Услуги.[Стоимость услуги]) 'Номер услуг отсортированых по цене', Услуги.[Название услуги], Услуги.[Стоимость услуги]

FROM /*указываем имена таблиц из которых выбираются записи*/ УСЛУГИ

WHERE Услуги.[Стоимость услуги]>@stoim /*При условии что стоимость услуги больше введенной стоимости*/

ORDER BY Услуги.[Название услуги] /*Сортируем выбранные записи*/

END