最近、Advantage Database Serverをバックエンドとして使用するシステムのサポートを引き継いだ。いくつかの背景のために、私は長年のデータベース経験を持っていますが、今までADSを使用したことはありませんでしたので、私の質問はこの特定のDBMSに標準パターンを実装する方法に関するものです。このようにID列を管理し、以前に開発されたストアドプロシージャありますAdvantage Database Serverで一意の代理キーを実装する
:
@ID = (SELECT ISNULL(MAX(ID), 0) FROM ExampleTable);
@ID = @ID + 1;
INSERT INTO Example_Table (ID, OtherStuff)
VALUES (@ID, 'Things');
--Do some other stuff.
UPDATE ExampleTable
SET AnotherColumn = 'FOO'
WHERE ID = @ID;
は私の問題は、私は今、並行して、このストアドプロシージャを複数回実行する必要があるということです。あなたが想像することができるように、私がこれをするとき、同じID値が何度もつかんでいます。
私が必要とするのは、同じ瞬間にストアドプロシージャを複数回実行しても一意であることが確実な一意の値を一貫して作成する方法です。 SQL Serverのでは、私はIDと呼ばれるIDENTITY
列を作成し、次の行うことができます:
INSERT INTO ExampleTable (OtherStuff)
VALUES ('Things');
SET @ID = SCOPE_IDENTITY();
ADSを似たようだautoinc
を持っていますが、私は何かが決定的に新規の値を返す方法を私に言って見つけることができません私が100%保証することができる方法で作成された価値は、同時使用では正しいでしょう。 ADS Developer's Guideは実際にautoinc
を使用して私に警告し、オンラインヘルプファイルは、最後に生成されたautoinc IDを取得するような機能を提供します(これは私が望むものではありません - 前のステートメントで作成したものすべてのセッションで作成されます)。また、ヘルプファイルには、並行処理が必要な状況で正しく機能しない可能性がある警告が記載されています。
これをADSに実装するにはどうすればよいですか? autoinc
を使用する必要がありますか、私が気付いていない他の組み込みメソッドを使用するか、開発者用ガイドの中で真に必要な作業を行い、最初にテーブルに挿入しようとする前に独自の識別子を生成しますか? autoinc
を使用する必要がある場合、テーブルに挿入されたばかりの値を取得するにはどうすればよいですか?
迅速な対応のおかげで非常に多くの!私はautoincとLastAutoIncに関する情報が古くなったと思う。 LastAutoIncの使用方法については、CONNECTIONとSTATEMENTを使用していましたが、並行性の問題が解決するかどうかについての情報はありませんでした。 LastAutoInc(STATEMENT)はちょうど私が後にしているもののように聞こえるようになりました。 –