2017-10-19 188 views
0

在我正在阅读的一本书中,它展示了如何合并来自2个不同表的记录,这里是下面的代码,我相信这在Oracle SQL中。如何将Oracle MERGE语句转换为T-SQL语句?

merge into emp_commission ec 
using (select * from emp) emp 
    on (ec.empno=emp.empno) 
when matched then 
    update set ec.comm = 1000 
    delete where (sal < 2000) 
when not matched then 
    insert (ec.empno, ec.enme, ec.deptno, ec.comm) 
    values (emp.empno, emp.ename, emp.deptno, emp.comm) 

我试图在SQL Server中运行,但我得到了MERGE语句必须用分号(;)结束 error.I添加了分号,但仍然得到同样的错误。

+0

PL/SQL是一种与Oracle SQL紧密协作的过程式(命令式)编程语言。 MERGE语句是Oracle SQL(并且Oracle实现了MERGE的SQL标准定义和语法)。你在这里有什么**没有与PL/SQL有关。了解PL/SQL不是** Oracle版本的SQL的名称。我将编辑您的帖子以纠正此问题。 – mathguy

+1

那么:那本书是什么?有一件事立即突出:为什么使用(select * from emp)emp'?为什么不只是使用emp?如果这是本书的整体质量,那么你不妨寻找另一本书。 – mathguy

+0

@mathguy本书是SQL Cookbook。感谢更新。 – Adaptron

回答

0
merge into emp_commission ec 
using (select * from emp) emp 
    on (ec.empno=emp.empno) 
when matched and 
sal < 2000 THEN 
delete 
when matched then 
    update 
    set ec.comm = 1000 
when not matched then 
    insert (empno, enme, deptno, comm) 
    values (emp.empno, emp.ename, emp.deptno, emp.comm); 
+0

@adaptron我更新了答案,插入行只能有没有前缀的列名。 – DrHouseofSQL