Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая не моя.docx
Скачиваний:
17
Добавлен:
27.09.2019
Размер:
429.37 Кб
Скачать
      1. Триггеры

1. Триггер CheckReceptionDateTime

В таблице dbo.Reception сопоставляется дата добавляемого приема и дата рождения указанного пациента. В случае, если дата приема меньше даты рождения пациента происходит откат.

Листинг программного кода:

create trigger CheckReceptionDateTime

on dbo.Reception

for insert

as

if (select i.TimeReception from inserted i) < (select p.DateBirth from Pacient p,inserted i where p.ID = i.PacientID)

begin

print 'Дата приема не может быть меньше даты рождения пациента'

rollback

end

go

Некорректная попытка добавления приема:

exec AddReception

@pacientID = 1,

@notice = 'значительное улучшение',

@diagnosisID = 1,

@medicineID = 1,

@timeReception = '1919-01-01',

@medProcedureID = 1

go

Результат срабатывания триггера:

2. Триггер DontUpdateGender

Данный триггер запрещает добавление и удаление строк в таблицу dbo.Gender, после того, как уже были введены 2 пола.

Листинг программного кода:

create trigger DontUpdateGender

on dbo.Gender

for update,insert,delete

as

if (select COUNT(*) from Gender) > 1

begin

print 'Запрещено добавление или удаление строк в таблице'

rollback

end

go

Пример кода для срабатывания триггера:

select * from Gender

insert into Gender(Name) values('M')

Результат срабатывания триггера:

3. Триггер IncorrectHospName

Проверяет корректность введеного названия больницы при изменении или добавлении строк (при условии что в таблице уже есть хотя бы 1 строка).

Листинг программного кода:

create trigger IncorrectHospName

on dbo.Hospital

for update, insert

as

if(select COUNT(*) from Hospital) > 0

begin

if ((select i.Name from inserted i) <> (select top 1 Name from dbo.Hospital))

begin

print 'Введеное имя больницы отличается от имеющегося. Изменение таблицы отменено'

rollback

end

end

go

Пример кода для срабатывания триггера:

select * from Hospital

update Hospital

set Name = 'Больница №3'

where ID = 1

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

Листинг программного кода:

create trigger CheckAbulanceNo

on dbo.Pacient

after update,insert

as

if (select count(*) from Pacient p,inserted i where p.AmbulanceNo = i.AmbulanceNo) > 1

begin

declare @num int = (select inserted.AmbulanceNo from inserted)

----

while (select COUNT(*) from Pacient where Pacient.AmbulanceNo = @num) > 0

set @num = Floor(RAND() * 100000)

----

update Pacient

set AmbulanceNo = @num

from inserted i

where Pacient.ID = i.ID

print 'Номер карты изменен на случайный'

end

go

Пример кода для срабатывания триггера:

update Pacient

set AmbulanceNo =

(select Pacient.AmbulanceNo from Pacient where Pacient.ID = 0)

where ID = 1

Результат срабатывания триггера:

  1. Список литературы

              1. Виейра Р. «Программирование баз данных Microsoft SQL Server 2005»