Курсач бази даних готельного комплексу / CREATE PROCEDURE PersonEmpInsert
.docxCREATE PROCEDURE PersonEmpInsert
@Firstname VARCHAR(50),
@Surname VARCHAR (50),
@Address VARCHAR (50),
@PostID INT = NULL,
@Salary INT = NULL
AS
DECLARE @LocalError INT
BEGIN TRANSACTION
INSERT INTO Person (Firstname, Surname, Address)
VALUES (@Firstname, @Surname, @Address)
SET @LocalError = @@ERROR
DECLARE @PersonID INT
SET @PersonID = IDENT_CURRENT('Person')
INSERT INTO Employee (PersonID, PostID,
Salary)
VALUES (@PersonID, @PostID,
@Salary)
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 PersonClientInsert
@Firstname VARCHAR(50),
@Surname VARCHAR (50),
@Status VARCHAR(25) = NULL,
@AddressTypeID VARCHAR(10),
@CityID VARCHAR(10),
@CountryID VARCHAR(10),
@Address VARCHAR(10)
AS
DECLARE @PersonID INT
INSERT INTO Person (Firstname, Surname, Address)
VALUES (@Firstname, @Surname, @Address)
SET @PersonID = IDENT_CURRENT('Person')
INSERT INTO Client (PersonID, Status)
VALUES (@PersonID, @Status)
INSERT INTO Address (AddressTypeID, CityID, CountryID, Address )
VALUES (@AddressTypeID, @CityID, @CountryID, @Address)
SET @PersonID = IDENT_CURRENT('Person')
GO
Create view OrdersData AS
SELECT
P.Surname AS 'Фамилия',
P.FirstName AS 'Имя',
OT.Description AS 'Тип заказа',
T.Description AS 'Тип транспорта'
FROM Orders O
INNER JOIN Client C
ON O.ClientID = C.ClientID
INNER JOIN Person P
ON C.PersonID = P.PersonID
INNER JOIN OrderType OT
ON OT.OrderTypeID = O.OrderTypeID
INNER JOIN Transport T
ON T.TransportID = O.TransportID
Go
CREATE VIEW PersonAddress AS
SELECT
P.Firstname,
P.Surname,
A.Address,
AType.Description AS AddressType
FROM Person P
INNER JOIN Address A
ON P.PersonID = A.PersonID
INNER JOIN AddressType AType
ON A.AddressTypeID = AType.AddressTypeID
CREATE TRIGGER CheckClientNotInEmployee
ON Client
FOR INSERT, UPDATE
AS
BEGIN TRANSACTION
DECLARE @EmployeeID INT
DECLARE @PersonID INT
SELECT @PersonID = i.PersonID
FROM inserted i
SELECT @EmployeeID = EmployeeID
FROM Employee E
WHERE E.PersonID = @PersonID
IF (@EmployeeID IS NOT NULL) AND (@EmployeeID > 0)
BEGIN
RAISERROR ('Попытка вставить в таблицу Client объект, присутствующий в
таблице Employee.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
GO
CREATE TRIGGER CheckEmployeeNotInClient
ON Employee
FOR INSERT, UPDATE
AS
BEGIN TRANSACTION
DECLARE @ClientID INT
DECLARE @PersonID INT
SELECT @PersonID = i.PersonID
FROM inserted i
SELECT @ClientID = ClientID
FROM Client C
WHERE C.PersonID = @PersonID
IF (@ClientID IS NOT NULL) AND (@ClientID > 0)
BEGIN
RAISERROR ('Попытка вставить в таблицу Employee объект,
присутствующий в таблице Client.',
16, 1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END