如何在医院数据库中创建触发器?

时间:2019-06-08 14:01:12

标签: sql sql-server tsql

我有两个表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 个答案:

答案 0 :(得分:2)

我不明白您真正想在这里做什么,或者为什么要这样,但是这就是我想您要做的

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

我会把它留给你,因为它是一个高频头。

Here is a live demo ,您可以在其中在线玩它。