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 件のコメント:
コメントを投稿