• ベストアンサー

SQLServer + PHP で直近に追加されたレコードを取得する方法

SQLServer + PHPという環境で開発しています。 過去にMySQLで開発した際には,mysql_insert_idという 関数を使用してIDを取得できました。 ところがSQLServer用にはこの関数がないので困っています。 とりあえず私は,トランザクションでテーブルをロックし, 書き込まれないことを保証した上で,IDの最大値(このIDは オートインクリメントしています)を取得する, という方法を考えています。 果たしてこの方法が定跡かどうかも分からないので,アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ちとイメージが沸かないのですが、 レコードを追加する一連の処理の最後に、今追加したレコードのオートインクリメントの値を取得したい ってことですか? @@IDENTITY が使えますね。 この URL は規約に引っかかるのかな・・・ http://blog.temtecomai.net/archives/9477867.html じゃぁこっちで http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=sql+server+%22%40%40IDENTITY%22&num=50

nizakana321
質問者

お礼

ご回答ありがとうございます. @@IDENTITYを調べてみました. SELECT @@IDENTITY AS 'column_name'; でIDを取得できました. ありがとうございました.

関連するQ&A

  • トランザクションとlast_insert_id

    トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 以下のような処理を期待しているのですが、hoge1テーブルのauto_increment値が取得できずに困っております。last_insert_id に関わらず、hoge1テーブルのauto_increment値が取得できる方法があれば教えてください。 (1) トランザクション開始 (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; (3) ( ロールバック ) (4) $key=mysql_insert_id(); (5) $sql2=" INSERT INTO hoge2(hoge1_primary,age) value($key,'20歳'); "; (6) ( ロールバック ) (7) コミット (8) トランザクション終了 よろしくお願いします。 環境: php5,mysql5 (InnoDB)

    • ベストアンサー
    • MySQL
  • MySQLでinsertした行を取得する

    table t1 id name ------- 1 aaa 2 asv 3 aae といったauto incrementのidを持ったテーブルt1を考えたときに mysql_queryで新規行をinsertした場合にそのidを取得するような ことはできるのでしょうか? phpのmanualを参考にしたところ出来ないような感じのことが書かれて いたのですが,このようなことは頻繁に必要な気もするのですが・・・ 既に考えた案としては ・auto incrementを外して最大のidの1つ上を指定してinsertする ・一度lockしてからinsertして最大のidを取得する というものです もっと1つの関数かなにかでスマートに書けたらいいのですが

    • ベストアンサー
    • PHP
  • AUTO_INCREMENT の値をINSERT前に知りたい

    PHP(PEAR)+MYSQLでWEBアプリを作成しているのですが、AUTO_INCREMENTを設定した値をデータのINSERTを行う前に取得したいのですが、どのようにすればいいのでしょうか?INSERT後であればLAST_INSERT_ID()やmysql_insert_id()で取得できるのは分かっているのですが…。ちなみに現在のテーブル型はInnoDBです。MySQLもしくはPearの命令でお分かりになる方お教えください。よろしくお願いします。

  • 重複エラー時のシーケンスIDの取得方法について

    いつも参考にさせて頂いております。 重複エラー時のシーケンスIDの取得方法についてご質問させて頂きます。 ユニークキー設定してあるテーブルにデータを挿入し、入っている行のAUTO_INCREMENTの値を取得したい場合、 挿入できるものに関しては挿入後LAST_INSERT_ID()で取得できますが、 重複エラーにより挿入されない場合の取得方法で悩んでおります。 挿入するデータには限りがあるので、挿入されたデータ量が増えるほど(時間が経てば経つほど)、 エラーが返る可能性が高くなり、その分の遅延がもったいないなぁと思っておりますが、 何かよい方法はありませんでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • バルクINSERT直後に、最後のIncremet値は取得できますか?

    PHPからMySQLへトランザクションを使わずに、 INSERT INTO test (id,count) VALUES (5,5),(6,6) のようにINSERTした直後に、SELECT LAST_INSERT_ID(); としても、5が返却されてしまいます。 これはMySQLの仕様でしょうか? 又、 SELECT LAST_INSERT_ID() ではなく、 SELECT LAST_INSERT_ID() FROM test; のようにテーブル名を指定する方法は何か意味があるのでしょうか? テーブル名を指定すると、テーブルにあるレコード数分 データが返却されてしまいました。。

    • ベストアンサー
    • MySQL
  • LAST_INSERT_IDで同時にアクセスが会った時

    MYSQL 3.23 auto_incermentで発行されたIDを別テーブルに使いたいのです。 last_insert_id や mysql_insert_id はコネクションごとに区別されるというのは本当でしょうか? 同時に複数のinsertが実行された場合でも、同じコネクションで発行されたIDだけを取得可能でしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 【MySQL】auto_incrementの値を他のカラムにも入れたい

    MySQL初心者です。 以下のようなテーブルを作ろうかと考えています(PHP経由) ====================== id   filename 1    1.jpg 2    2.jpg   ・・・ ====================== 要はオートインクリメントで得たidを別のカラムでも活用したいのです。 とりあえず考えたのは、 1) insert で id を書き込む 2) last_insert_id() で id を得て update で filename を書き込む・・・ といったところですが、2段階作業というのが気になります。 「一発で」できる方法があるならそうしたいのですが無理でしょうか。 「無理」という回答でも結構です。 お詳しい方、よろしくお願いいたします。

  • IDが最大値のレコードに項目を追加

    MYSQLで、一度書き込み処理をさせ、 書き込んだIDを取得して加工したsubidを、 テーブルに再接続をしてIDの最大値を取得して、 それを最新のレコードとして追加で項目を書き込もうと思うのですが、 なぜかうまくいきません。 再接続の際に、先程書き込んだレコードを読み出す方法がまずいのでしょうか? どなたかご教授ください。 よろしくお願いいたします。 -----------省略----------- <?php $subid = $nosel . $finish ; $update_id = max(id); $db = mysql_connect("localhost","hogehoge",""); mysql_select_db("hogehogeuser"); $query = "update hogehoge set subid = \"$subid\" where ID = $update_id\""; mysql_query($query); mysql_close($db); ?>

  • PHPでCSVを読み込みMySQLに行追加・変更

    PHPでCSVファイルを読み込み、MySQLにデータを追加する方法を教えてください。 その際に、新規の行はIDを指定せず、auto_incrementでidを設定するようにして、IDを指定した場合は、既存の行を変更するようにしたいです。 また、prepareメソッドを用いたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 空きのID番号を取得する方法

    いつもお世話になっております。 create table AAA( ID int(6) primary key not null auto_increment, DATA varchar(30), )engine=MyISAM; というテーブルにおいて、 insertをすると、IDが1から順に割り振られていきますが、 途中のレコードをdeleteすると、そこが空きのID番号となってしまい、 次にinsertすると、空き番号が残ってしまいます。 やりたいことは、その空き番号を有効活用するために、 auto_incrementを使用せずに、空き番号を適当に取得して、 insertをしたいのです。 何か効率的な良い方法をご存知の方がいらっしゃいましたら、 ご教授いただけると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL