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

Sql 如何在医院数据库中创建触发器?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两张病床 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

我有两张病床

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),
);
服务

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\u 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\u service
,因为表中没有
infirmier
,并且尝试使用
join
,但我不知道如何插入

这是我在插入时得到的结果:


我不明白你到底想在这里做什么,或者为什么要这样做,但我认为你想做的就是这样

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

我会把它留给你的,因为这是一种工作方式


您可以在哪里在线玩它。

您是否尝试加入
插入的
服务
表?只是
。。。从I.ID=S.ID上的INSERTED I Inner加入服务S
,并在您的
SELECT
语句中包含
S.NOM_服务
列。问题是我不知道我应该把它放在哪里,如果我在何时插入Infirier,它将显示无效名称。好吧,我试试看!不,每次插入弱者后她都会告诉我们,是吗?“她告诉我们的”???所以,这是一个家庭作业。我想当我插入infirmier时,会出现nom_服务,我的意思是我也可以插入infirmier表,尽管它不是其中的属性。@SirináStrong你说“不,她在每次插入infirmier后都告诉我们”我这样做了,并且触发了infirmier
表,正如你所说的。你说“应该出现列
NOM_SERVICE
”,然后又像你说的那样出现了。那么问题出在哪里呢?@SirináStrong因为它解决了你的问题,请阅读