2017-10-19 9 views
0

私が読んでいる本の中には、2つの異なるテーブルのレコードをマージする方法が示されています。以下のコードがあります。これはOracle SQLにあります。 (;)私は、SQL Serverでこれを実行しようとしているが、私はMERGE文はセミコロンで終了する必要がありました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) 

error.Iはセミコロンを追加しましたが、まだなっています同じエラー。

+0

PL/SQLは、Oracle SQLと緊密に連携する手続き型(必須)プログラミング言語です。 MERGE文はOracle SQLです(OracleではSQL標準の定義とMERGEの構文が実装されています)。 PL/SQLとは何も関係ありません。 PL/SQLが** OracleのバージョンのSQLの名前ではないことを理解してください。あなたの投稿を編集してこれを修正します。 – mathguy

+1

それから:その本は何ですか?すぐに目立つのは、なぜ(empからselect * 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

関連する問題