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表记录已经存在,就做更新,要是不存在,就做插入,要是插入查询不满足的话,就把之前那条记录删除。
可以在写在这 一个里面吗?

解决方案 »

  1.   

    感觉做个主外键关系即可。
    A 表主表,prealarmTmp表里面还有A表外键即可。 级联更新或删除。插入的话直接用你这个触发器即可。
      

  2.   

    A 表和prealarmTmp表不是在同一个数据库里的
    但是在同一个服务器上,可以做主外键关系?
      

  3.   

    if 条件
       语句
    else
       语句
      

  4.   

    级联更新好像不行
    因为tc.Value在插入的时候,可能不满足条件。但是更新后,满足条件了,那就要把它查到prealarmTmp去
      

  5.   


    那就做判断吧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) --更新
    --....里面写你的逻辑处理代码即可