2011年11月3日木曜日

SQL Anywhere 行の挿入と更新を1ステートメントで

行の挿入と更新を1ステートメントでできるとトランザクションを考える必要がなく便利な場合が多い。
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として実行されます。



pkeyvaluecreatedmodified
1abc2011-11-02 23:44:39.1792011-11-02 23:44:39.179


2回目の実行結果

INSERT INTO mytable (pkey,value)
ON EXISTING UPDATE
VALUES('1', 'xyz');

プライマリーキーであるpkey=1に対するUPDATEとして実行されます。



pkeyvaluecreatedmodified
1xyz2011-11-02 23:44:39.1792011-11-03 00:06:21.069



他のRDBMSではMERGEやREPLACEというのが似たような動きをしてくれるようである。

0 件のコメント:

コメントを投稿