Microsoft SQL Server 2005にて。
自動でインクリメントする項目は、IDENTITYで設定できるが、1テーブルには1つしかありません。
そこで、そのほかに自動でインクリメントする項目がほしかった場合は、どのようにするのか、調べてみました。
わりと簡単にMAX+1とかでいいじゃん、って思ったりもしましたが、レコードが0件の時は、成立しません。
0件の時は、初期値がほしいわけです。
それを解決するのが「COALESCE」。
取得した値がnullだったら、○を返す、というようなもの。
すばらしいです。これで、IDENTITYなんか怖くない。ちなみに、COALESCEは、MySQLにもあります。そのほかのDBにもあるとおもいます。
INSERT INTO table_name(id) SELECT COALESCE(MAX(id)+1,1) FROM table_name

コメントする