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因为它解决了你的问题,请阅读