忍者ブログ
[415]  [414]  [413]  [412]  [410]  [409]  [408]  [407]  [406]  [405]  [404
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

SqlServerでSELECT条件によりInsertとUpdateを使い時がある

今まではSELECTで読み出して、条件によりInsertとUpdateを
コーディングしていたが2008からMERGE命令が使えるようになっている

下記がselectでINYMDとINNOを条件にしたUpdateとINSERTの例である
;が必須なので注意が必要

MERGE INTO GETANKA AA
  USING ( 
  SELECT A.inymd,a.inno,a.hkbn,a.cd,a.su as ksu
        ,a.su * isnull(b.tanka,0) as kin
   ,isnull(b.tanka,0) as tanka
  ,kbn= 20,a.su as SKG,skigo as ROT 
  FROM SAGYD2 A
  left join GETANKA20 B on(a.SGYMD = B.SGYMD AND A.SGNO = b.SGNO)
  WHERE a.SGYMD >= 20180901 And a.sgymd <= 20180930 
  ) BB  ON (AA.INYMD = BB.INYMD AND AA.INNO = BB.INNO) 
  WHEN MATCHED THEN 
     UPDATE SET KIN=BB,KIN
  WHEN NOT MATCHED THEN 
     insert  (INYMD,INNO,HKBN,CD,KSU,KIN,TANKA,KBN,SKG,ROT)
    VALUES (
    BB.INYMD,BB.INNO,BB.HKBN,BB.CD,BB.KSU,BB.KIN,BB.TANKA,BB.KBN,BB.SKG,BB.ROT
   );

なおSQLserverの古いバージョンからアップデートしたSQLserverは
互換性レベルを2008以上にする必要がある

マネージメントスタジオで
データベースを右クリック >>オプション>>互換性レベルを2008以上に
データベースの再起動が必要になる、再起動しないとインサートエラーになる



拍手

PR
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
フリーエリア
最新CM
[03/10 DORA]
最新TB
プロフィール
HN:
dorabu
性別:
非公開
バーコード
ブログ内検索
P R
忍者画像RSS
Copyright © ドラブーのアンドロイドとIoTなブログ All rights reserved. / Template by 四季. / Material by てんせん.

忍者ブログ [PR]