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

阿狸Ahri 2015-05-28 11:59:08

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表只能用一次?

...全文
745 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿狸Ahri 2015-05-29
  • 打赏
  • 举报
回复
我之前问的是这个 贴 http://bbs.csdn.net/topics/391019630 我自己没发现 什么问题。 我现在连extis都不判断了,直接 先删除这个ID对应记录,管他有没有这个记录 然后在插入
还在加载中灬 2015-05-28
  • 打赏
  • 举报
回复
引用
这个应该不是兼容问题,因为我之前在吧里有问过一个sql插入的问题,那时候版主叫我用Merge,
我那时候是可以用的....


如果是这样,那就奇怪了,你翻看一下,那时候的语句,翻出来比较一下
阿狸Ahri 2015-05-28
  • 打赏
  • 举报
回复
好吧,我吧其他注释了,看了一下,还是这个问题,算了, 不弄了,我判断一下插入算了
阿狸Ahri 2015-05-28
  • 打赏
  • 举报
回复
引用 7 楼 ky_min 的回复:
楼主说是SQL 2008 R2 如果是应该是支持的 但是,必须是服务器的是2008才有用,客户端2008就好玩了
什么意思? 额。我这边的数据库,远程服务器的都是 2008 R2的 这个应该不是兼容问题,因为我之前在吧里有问过一个sql插入的问题,那时候版主叫我用Merge, 我那时候是可以用的....
还在加载中灬 2015-05-28
  • 打赏
  • 举报
回复
楼主说是SQL 2008 R2
如果是应该是支持的

但是,必须是服务器的是2008才有用,客户端2008就好玩了
Tiger_Zhao 2015-05-28
  • 打赏
  • 举报
回复
你单独留下Merge语句,其它都注释起来,是否报错。
应该当前数据库不支持 Merge 语句。
你连接的是 2008 的数据库吗?我认为就是兼容性设置的问题。
阿狸Ahri 2015-05-28
  • 打赏
  • 举报
回复
好吧,我确实少了一个end,我后面发现了。 但是貌似不是这个end的问题啊,我现在仍然是这个错误, 我没办法 只有用if exits 在判断一次了
hery2002 2015-05-28
  • 打赏
  • 举报
回复
楼上都回答了
卖水果的net 版主 2015-05-28
  • 打赏
  • 举报
回复
第一个 IF 语句,没有 END 。
还在加载中灬 2015-05-28
  • 打赏
  • 举报
回复
是不是触发器里面的inserted,deleted表只能用一次?
没有这个说法

不过你少了一个END
Tiger_Zhao 2015-05-28
  • 打赏
  • 举报
回复
你的数据库设了兼容模式?老版本不支持 Merge 语句。

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧