Курсач бази даних готельного комплексу / CREATE PROCEDURE ЧеловекРаботникВставить
.doc
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