SQLSERVERのシーケンス(オートナンバー)の主キーだったりするテーブルがある場合、その値が何になるかはINSERTしてみないことにはわかりません。時としてそのキーを別のテーブルのキーに使ったり値として使ったり。。。ということがあります。
ちょっと古い記事ですが「@@IDENTITY クライシスを管理する」の中で、そういった問題の解決策のひとつとして、INSERT直後に値をSELECTしてしまうという荒業を見つけました。
今まで、SCOPE_IDENTITY()を使って値を設定したり取得したりすることはやったことがありますが、SELECT文を発行するという発想にはなりませんでした。
まぁそもそも、このようなキーフィールドは、外からを値を設定するのは、あまり良くない発想です。そういう意味ではこの方法は正しいと言えそうです。また、DataSet内の連携もあるため、意外と理想系なのかも知れませんね。また、トリガーなどで値を設定しているフィールドも参照することによって正しい値を取得することが出来ます。そういったメリットはあります。
しかし反面、コードがトリッキーに見えます。この「@@IDENTITY クライシスを管理する」を読んでいれば別だと思いますが。
0 件のコメント:
コメントを投稿