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

CREATE 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