【问题标题】:How can i translate an Oracle MERGE statement to a T-SQL statement?如何将 Oracle MERGE 语句转换为 T-SQL 语句?
【发布时间】:2017-10-19 19:45:15
【问题描述】:

在我正在阅读的一本书中,它展示了如何合并来自 2 个不同表的记录,这是下面的代码,我相信这是在 Oracle 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 语句必须以分号 (;) 终止错误。我已添加半-colon 但仍然出现同样的错误。

【问题讨论】:

  • PL/SQL 是一种与 Oracle SQL 紧密协作的过程(命令式)编程语言。 MERGE 语句是 Oracle SQL(Oracle 实现了 MERGE 的 SQL 标准定义和语法)。您在此处所拥有的与 PL/SQL无关。了解 PL/SQL 不是 SQL 的 Oracle 版本的名称。我将编辑您的帖子以更正此问题。
  • 那么:那是什么书?一件事立即脱颖而出:为什么using (select * from emp) emp?为什么不只是using emp?如果这就是这本书的整体质量,你还不如换一本。
  • @mathguy 这本书是 SQL Cookbook。感谢您的更新。

标签: sql sql-server oracle tsql merge


【解决方案1】:
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);

【讨论】:

  • @adaptron 我更新了答案,插入行只能有没有前缀的列名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 2013-04-19
相关资源
最近更新 更多