当前位置: 代码迷 >> Sql Server >> sql 2008 R2 Merge into 说 'Merge' 附近有语法异常,但是小弟我看了老半天不知道哪里语法有有关问题了
  详细解决方案

sql 2008 R2 Merge into 说 'Merge' 附近有语法异常,但是小弟我看了老半天不知道哪里语法有有关问题了

热度:898   发布时间:2016-04-24 09:03:58.0
sql 2008 R2 Merge into 说 'Merge' 附近有语法错误,但是我看了老半天不知道哪里语法有问题了

CREATE TRIGGER Tri_Oper_BreakLaw 
   ON  Oper_BreakLaw
   AFTER  INSERT,DELETE,UPDATE
AS 
BEGIN
                      
   --插入,修改
   IF EXISTS(SELECT 1 FROM inserted)  
   BEGIN
     --插入历史表
     INSERT INTO AppInface_Oper_BreakLaw_List 
     SELECT BLID,GETDATE(),0 FROM inserted 
     
     ;Merge into AppInface_Oper_BreakLaw as t
     using inserted as i 
     on i.BLID = t.BLID
     when matched then update set t.OpTime = GETDATE(),t.OpType=0
     when not matched then insert values(i.BLID,GETDATE(),0);
    
    --删除
   IF   EXISTS(SELECT 1 FROM deleted)
    BEGIN
      INSERT INTO AppInface_Oper_BreakLaw_List 
      SELECT BLID,GETDATE(),0 FROM deleted 
     
      ;Merge into AppInface_Oper_BreakLaw as t
      using deleted as i 
      on i.BLID = t.BLID
      when matched then update set t.OpTime = GETDATE(),t.OpType=0
      when not matched then insert values(i.BLID,GETDATE(),0);
    END
    
END
GO



错误信息:
消息 102,级别 15,状态 1,过程 Tri_Oper_BreakLaw,第 19 行
'Merge' 附近有语法错误。
消息 102,级别 15,状态 1,过程 Tri_Oper_BreakLaw,第 31 行
'Merge' 附近有语法错误。


我都不知道我哪里搞错了,我分号加了,我平时这么写没有问题啊
是不是触发器里面的inserted,deleted表只能用一次?


------解决思路----------------------
你的数据库设了兼容模式?老版本不支持 Merge 语句。
------解决思路----------------------
是不是触发器里面的inserted,deleted表只能用一次?
没有这个说法

不过你少了一个END
------解决思路----------------------
第一个 IF 语句,没有 END 。
------解决思路----------------------
引用
这个应该不是兼容问题,因为我之前在吧里有问过一个sql插入的问题,那时候版主叫我用Merge,
我那时候是可以用的....


如果是这样,那就奇怪了,你翻看一下,那时候的语句,翻出来比较一下
  相关解决方案