Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсач бази даних готельного комплексу / CREATE PROCEDURE ЧеловекРаботникВставить

.doc
Скачиваний:
24
Добавлен:
20.02.2016
Размер:
39.94 Кб
Скачать

3

CREATE PROCEDURE ЧеловекРаботникВставить

@Имя VARCHAR(50),

@Фамилия VARCHAR (50),

@Адрес VARCHAR (50),

@ДолжностьИдн INT = NULL,

@Зарплата INT = NULL

AS

DECLARE @LocalError INT

BEGIN TRANSACTION

INSERT INTO Человек (Имя, Фамилия, Адрес)

VALUES (@Имя, @Фамилия, @Адрес)

SET @LocalError = @@ERROR

DECLARE @ЧеловекИдн INT

SET @ЧеловекИдн = IDENT_CURRENT('Человек')

INSERT INTO Работник (ЧеловекИдн, ДолжностьИдн, Зарплата)

VALUES (@ЧеловекИдн, @ДолжностьИдн, @Зарплата)

SET @LocalError = @LocalError + @@ERROR

IF @LocalError = 0

BEGIN

COMMIT TRANSACTION

PRINT 'Вы успешно добавили нового клиента в список'

END

ELSE

BEGIN

IF @LocalError = 547

BEGIN

ROLLBACK TRANSACTION

PRINT 'Ошибка ввода. Вы должны добавить

клиента в таблицу Person перед лобавлением его в таблицу Client'

END

ELSE

BEGIN

ROLLBACK TRANSACTION

PRINT 'Произошла ошибка, попробуйте повторить ввод '

END

END

GO

CREATE PROCEDURE ЧеловекКлиентВставить

@Имя VARCHAR(50),

@Фамилия VARCHAR (50),

@Статус VARCHAR(25) = NULL,

@ТипАдресаИдн VARCHAR(10),

@ГородИдн VARCHAR(10),

@СтранаИдн VARCHAR(10),

@Адрес VARCHAR(10)

AS

DECLARE @ЧеловекИдн INT

INSERT INTO Человек (Имя, Фамилия, Адрес)

VALUES (@Имя, @Фамилия, @Адрес)

SET @ЧеловекИдн = IDENT_CURRENT('Человек')

INSERT INTO Клиент (ЧеловекИдн, Статус)

VALUES (@ЧеловекИдн, @Статус)

INSERT INTO Адрес (ТипАдресаИдн, ГородИдн, СтранаИдн, Адрес)

VALUES (@ТипАдресаИдн, @ГородИдн, @СтранаИдн, @Адрес)

SET @ЧеловекИдн = IDENT_CURRENT('Человек')

GO

Create view ИнфЗаказа AS

SELECT

Ч.Фамилия AS 'Фамилия',

Ч.Имя AS 'Имя'

FROM Заказ З

INNER JOIN Клиент К

ON З.КлиентИдн = К.КлиентИдн

INNER JOIN Человек Ч

ON К.ЧеловекИдн = Ч.ЧеловекИдн

Go

CREATE VIEW ЧеловекАдрес AS

SELECT

Ч.Имя,

Ч.Фамилия,

А.Адрес,

ТипА.Описание AS ТипАдреса

FROM Человек Ч

INNER JOIN Адрес А

ON Ч.ЧеловекИдн = А.ЧеловекИдн

INNER JOIN ТипАдреса ТипА

ON А.ТипАдресаИдн = ТипА.ТипАдресаИдн

GO

CREATE TRIGGER ПроверитьНеНаходитсяЛиКлиентВРаботнике

ON Клиент

FOR INSERT, UPDATE

AS

BEGIN TRANSACTION

DECLARE @РаботникИдн INT

DECLARE @ЧеловекИдн INT

SELECT @ЧеловекИдн = i.ЧеловекИдн

FROM inserted i

SELECT @РаботникИдн = РаботникИдн

FROM Работник Р

WHERE Р.ЧеловекИдн = @ЧеловекИдн

IF (@РаботникИдн IS NOT NULL) AND (@РаботникИдн > 0)

BEGIN

RAISERROR ('Попытка вставить в таблицу Client объект, присутствующий в

таблице Employee.', 16, 1)

ROLLBACK TRANSACTION

END

ELSE

BEGIN

COMMIT TRANSACTION

END

GO

CREATE TRIGGER ПроверитьНеНаходитсяЛиРаботникВКлиенте

ON Работник

FOR INSERT, UPDATE

AS

BEGIN TRANSACTION

DECLARE @КлиентИдн INT

DECLARE @ЧеловекИдн INT

SELECT @ЧеловекИдн = i.ЧеловекИдн

FROM inserted i

SELECT @КлиентИдн = КлиентИдн

FROM Клиент К

WHERE К.ЧеловекИдн = @ЧеловекИдн

IF (@КлиентИдн IS NOT NULL) AND (@КлиентИдн > 0)

BEGIN

RAISERROR ('Попытка вставить в таблицу Employee объект,

присутствующий в таблице Client.',

16, 1)

ROLLBACK TRANSACTION

END

ELSE

BEGIN

COMMIT TRANSACTION

END