SQL Server ограничение на удаление - PullRequest
0 голосов
/ 25 ноября 2018

Я создал эту таблицу:

CREATE TABLE OfficialEmployee
(
    EID Integer not null foreign key references Employee(EID),
    StartWorkingDate date not null ,
    Degree char(20) not null,
    Department char(50) not null,
    DID Integer not null foreign key references Department(DID)
);

, которая ссылается на таблицу Employee с помощью DID:

CREATE TABLE Employee
(   
    EID Integer not null PRIMARY KEY,
    FirstName char(30) not null,
    LastName char(30) not null,
    BirthDate date not null,
    CellPhoneNumber Integer not null,
    City char(30) not null,
    StreetName char(30) not null,
    Number Integer not null,
    Door Integer not null
);

CREATE TABLE Department 
(
    DID Integer not null PRIMARY KEY,
    Name char(30) not null,
    Description char(200) not null,
    Manage Integer not null FOREIGN KEY REFERENCES OfficialEmployee(EID)
);

, и я хочу установить ограничение, которое при OfficialEmployee удаляется, его запись в Employee также будет удалена, только если он не является менеджером (в таблице Department), иначе это будет (с использованием каскада).

Как я могу это сделать?

(я использую SQL Server)

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

В SQL Server вы должны помнить, что deletedinserted может иметь более одной записи.

Итак, сделайте это, используя JOIN:

CREATE TRIGGER deleteEmployeeTrigger
ON dbo.OfficialEmployee
FOR DELETE AS
BEGIN
    DELETE e
        FROM dbo.Employee e JOIN
             dbo.deleted dd
             ON e.EID = dd.EID LEFT JOIN
             dbo.department d
             ON d.manage = dd.EID
    WHERE d.manage IS NULL;
END;
0 голосов
/ 25 ноября 2018

Предполагая, что описание, которое вы хотите избежать, это «Менеджер», вот простой триггер.

CREATE TRIGGER deleteEmployeeTrigger
ON dbo.OfficialEmployee
FOR DELETE
AS
    DELETE FROM dbo.Employee
    WHERE EID IN (SELECT deleted.EID FROM deleted) 
      AND NOT EXISTS (SELECT * FROM Department 
                      WHERE Manage = deleted.EID AND Description = 'Manager') 
...