这是一段针对sqlserver数据库的 merge语句:
MERGE CB_Ops_HQDaily_Dtl_Prod a USING CB_Ops_EntDaily_Dtl_Prod b ON a.SEQ_NO = b.SEQ_NO WHEN matched THEN UPDATE SET a.DISP_ORDER = b.DISP_ORDER, a.REMARK = b.REMARK WHEN NOT matched THEN INSERT (DISP_ORDER,REMARK) VALUES (b.DISP_ORDER,b.REMARK);
重点是WHEN NOT matched THEN部分
如果你查寻merge语法的问题,你会发现介绍的语句都是这种样式:
WHEN NOT matched THEN INSERT (a.DISP_ORDER,a.REMARK) VALUES (b.DISP_ORDER,b.REMARK);
或
WHEN NOT matched THEN INSERT a(DISP_ORDER,REMARK) VALUES (b.DISP_ORDER,b.REMARK);
如果你是使用第二、三个样式,会报各种错误
很奇怪吧,按道理讲 WHEN matched THEN 和 WHEN NOT matched THEN 是一个级别的,别名要能用都能用,要能省略都能省略。可事实是insert 不能用别名。