Как создать триггер в базе данных больницы? - PullRequest
1 голос
/ 08 июня 2019

У меня есть две таблицы infirmier таблица

CREATE TABLE INFIRMIER
(
    NUM_INF INT 
        FOREIGN KEY REFERENCES EMPLOYE(NUM_EMP) ,
    CODE_SERVICE VARCHAR(50) 
        FOREIGN KEY REFERENCES SERVICE(CODE_SERVICE),
    ROTATION VARCHAR(50), 
    SALAIRE MONEY,

    PRIMARY KEY (NUM_INF),
);

и service.

CREATE TABLE SERVICE
(
    CODE_SERVICE VARCHAR(50)
        PRIMARY KEY (CODE_SERVICE),
    NOM_SERVICE VARCHAR(50),
    BATIMENT INT, 
    DIRECTEUR INT
        FOREIGN KEY REFERENCES MEDECIN(NUM_MED), 
);

Я хочу создать триггер, который будет отображать новый недействительный объект, назначенный на nom_service после каждой вставки лазарета.

Я также создаю таблицу infirmier_tt для хранения в ней новой вставки по дате и операции.

 CREATE TABLE INFIRMIER_tt
 (
     change_id INT IDENTITY PRIMARY KEY,
     NUM_INF INT,
     CODE_SERVICE VARCHAR(50),
     ROTATION VARCHAR(100),
     SALAIRE MONEY,
     NOM_SERVICE VARCHAR(50),
     updated_at DATETIME,
     operation CHAR(3), 
         CHECK(operation = 'INS' OR operation = 'DEL')
);

Это код, который я использую

CREATE TRIGGER aff_inff 
ON INFIRMIER
AFTER INSERT 
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO INFIRMIER_tt(NUM_INF, 
                             --NOM_SERVICE, 
                             CODE_SERVICE, ROTATION, SALAIRE, updated_at, operation)
        SELECT 
            i.NUM_INF , 
            -- NOM_SERVICE from INFIRMIER I join SERVICE S on (I.CODE_SERVICE=S.CODE_SERVICE);
            CODE_SERVICE, 
            ROTATION,
            i.SALAIRE,
            GETDATE(),
            'INS'  
        FROM
            inserted i  
END

Проблема, с которой я сталкиваюсь, заключается в том, что когда я вставляю новый infirmier, я не могу вставить название службы nom_service, потому что в таблице нет infirmierи пытался использовать join, но я не знал, как.

Вот результаты, которые я получаю, когда делаю вставку:

enter image description here

1 Ответ

2 голосов
/ 08 июня 2019

Я не понимаю, что вы действительно хотите здесь делать или почему так должно быть, но вот что, я думаю, вы хотите сделать

CREATE TABLE  SERVICE(
CODE_SERVICE  varchar(50)primary key (CODE_SERVICE),
NOM_SERVICE varchar(50),
BATIMENT int, 
DIRECTEUR int, 
);


CREATE TABLE INFIRMIER
(
NUM_INF int IDENTITY(1, 1) PRIMARY KEY NOT NULL,
CODE_SERVICE varchar(50),
ROTATION varchar(50), 
SALAIRE money,
CONSTRAINT FK_INF_CODE_SERVICE FOREIGN KEY (CODE_SERVICE) REFERENCES SERVICE(CODE_SERVICE)
);

CREATE TRIGGER TRIG1
ON INFIRMIER
AFTER INSERT
AS
BEGIN
  SET NOCOUNT ON;
  -- Change it to an INSERT 
  SELECT * 
  FROM INSERTED I INNER JOIN Service S 
  ON I.CODE_SERVICE = S.CODE_SERVICE;
END

INSERT INTO Service VALUES
('Service1', 'ServiceName1', 1, 1);

INSERT INTO Infirmier(CODE_SERVICE, ROTATION, SALAIRE) VALUES
('Service1', 'Rotation', 100.00);

Возвращает:

+---------+--------------+----------+----------+--------------+--------------+----------+-----------+
| NUM_INF | CODE_SERVICE | ROTATION | SALAIRE  | CODE_SERVICE | NOM_SERVICE  | BATIMENT | DIRECTEUR |
+---------+--------------+----------+----------+--------------+--------------+----------+-----------+
|       1 | Service1     | Rotation | 100.0000 | Service1     | ServiceName1 |        1 |         1 |
+---------+--------------+----------+----------+--------------+--------------+----------+-----------+

Как видите, появляется столбец NOM_SERVICE. Все, что вам нужно сейчас, это изменить оператор SELECT на INSERT.

Я оставлю это для тебя, как это работа.

Вот живая демонстрация , где вы можете поиграть с ней онлайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...