SQL Anywhereの場合はINSERT INTO ~ ON EXISTING UPDATE という句を使うとプライマリーキーを比較して挿入と更新を自動で切り替えて実施してくれる。
例として、前記事と同じこのようなテーブルに対して
- CREATE TABLE mytable (
- pkey varchar(10) NOT NULL,
- value varchar(20),
- created datetime NOT NULL DEFAULT current timestamp,
- modified datetime NOT NULL DEFAULT timestamp,
- PRIMARY KEY (pkey)
- )
1回目の実行結果
- INSERT INTO mytable (pkey,value)
- ON EXISTING UPDATE
- VALUES('1', 'abc');
INSERTとして実行されます。
pkey | value | created | modified |
1 | abc | 2011-11-02 23:44:39.179 | 2011-11-02 23:44:39.179 |
2回目の実行結果
- INSERT INTO mytable (pkey,value)
- ON EXISTING UPDATE
- VALUES('1', 'xyz');
プライマリーキーであるpkey=1に対するUPDATEとして実行されます。
pkey | value | created | modified |
1 | xyz | 2011-11-02 23:44:39.179 | 2011-11-03 00:06:21.069 |
他のRDBMSではMERGEやREPLACEというのが似たような動きをしてくれるようである。
0 件のコメント:
コメントを投稿