ALTER TRIGGER TRIGGER_PREALARM_INSERT ON [A]
FOR INSERT AS
BEGIN INSERT prealarmTmp
(
itemNodeRecID,
value,
careDateTime,
clientID,
familyNM,
firstNM
)
SELECT
tc.ItemNodeRecID,
tc.Value,
tct.CareDateTime,
tct.ClientID,
mc.ClientFamilyName,
mc.ClientFirstName
FROM Inserted tc
LEFT JOIN CareTimeline tct ON
tc.CareID = tct.CareID
LEFT JOIN ClientData mc ON
mc.ClientID = tct.ClientID
LEFT JOIN prealarmCode yp ON
tc.ItemNodeRecID = yp.itemNodeRecID
WHERE
tc.ModifyState = 1
AND tct.ModifyState = 1
AND (yp.itemType = 1 AND (CAST(tc.Value AS float) < CAST(yp.value1 AS float)
OR CAST(tc.Value AS float) > CAST(yp.value2 AS float))
OR (yp.itemType = 2 AND CAST(tc.Value AS float) = CAST(yp.value3 AS float)))
END
现在这段是A的一个触发器,在增加一条记录的时候,会去做一个查询,如果符合条件,就插入到prealarmTmp表里。现在如果我想修改一下,要是A表删除记录的话,prealarmTmp表有条数据的话,也同时删掉。
如果A表更新的时候,满足插入查询的话,如果prealarmTmp表记录已经存在,就做更新,要是不存在,就做插入,要是插入查询不满足的话,就把之前那条记录删除。
可以在写在这 一个里面吗?
A 表主表,prealarmTmp表里面还有A表外键即可。 级联更新或删除。插入的话直接用你这个触发器即可。
但是在同一个服务器上,可以做主外键关系?
语句
else
语句
因为tc.Value在插入的时候,可能不满足条件。但是更新后,满足条件了,那就要把它查到prealarmTmp去
那就做判断吧if exists(select 1 from inserted) and not exists(select 1 from deleted) --插入
--.....
if not exists(select 1 from inserted) and exists(select 1 from deleted) --删除
--....
if exists(select 1 from inserted) and exists(select 1 from deleted) --更新
--....里面写你的逻辑处理代码即可