• 締切済み

マージレプリケーション ID値の返し方

知識が浅く、自力で解決できないのでご協力お願い致します。 SQL Server2005を使用しています。 サーバーAとサーバーBで、マージレプリケーションで同期をとっているテーブルがあります。 Aの方のテーブルにストアドプロシージャを実行してINSERTし、そのID値(シーケンス番号)を直後にアウトプットとして取得したいのですが、どうも上手くクエリがうまく書けません。 例: AとBのあるテーブルには自動付番のシーケンス番号60までデータがあります。 AにINSERTして新規に追加されたデータのシーケンス番号は61となるので アウトプットとしてその61を返したいのですが、 マージの影響でコミット前のIDを返すのでしょうか、2など全く違った値が返ってきます。 実際にテーブルを確認すると、ちゃんとAもBもシーケンス番号61で新規追加されています。 現状のクエリではINSERT文のあとに 『SET @no_seq = @@IDENTITY』と記述していて、 マージレプリケーションを解除していれば@no_seqに正しいID値を返します。 他には ・@no_seq = SCOPE_IDENTITY ・@no_seq = IDENT_CURRENT('table_name') を試しましたが結果は同じでした。 クエリの書き方なのか、あるいは マージレプリケーションの設定にも詳しくないので なにか原因に心当たりがあれば教えて頂きたいです。 よろしくお願い致します。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>SET @no_seq = @@IDENTITY でうまくとれるのかどうか(あるいはあえてこれを使っている意図)を把握していませんが、 単にInsertの直後に select @no_seq = max(シーケンス番号) from テーブル名 ではダメですか?

noname#139341
質問者

お礼

ご回答ありがとうございます。

noname#139341
質問者

補足

ご回答ありがとうございます。 情報が不足していてスイマセン。 >単にInsertの直後に select @no_seq = max(シーケンス番号) from テーブル名 ではダメですか? 今回対象としているテーブルではデータを削除する事があります。 もしシーケンス番号=30のデータが削除された後にInsertが発生すると 新規データは空き番となったシーケンス番号=30に書きこまれる場合があるので一概にmax(シーケンス番号)を使用でずにいます。

関連するQ&A