0

私は現在、Pervasiveで最初の実際のプロジェクトを作成しています。タスクは、注文を含む特定のXML構造(ショップや製品など)を、自分で作成した3つのテーブルにマップすることです。これらのテーブルは、MS-SQL-Serverインスタンス内にあります。

すべてのテーブルには、自動的にインクリメントされる列である「id」と呼ばれる一意のキーがあります。Pervasiveがそれ自体を埋めようとしないように、すべてのマッピングからこの列を削除しました。

特定の計算、テーブルの1つでの分割キー、および他のテーブルで作成されたレコードへの参照については、データベースが作成したばかりのIDが必要になります。そのために、私は答えをグーグルで検索しました。「select@@identity;」を使用できます ステートメントとして、これは現在の接続に対して最後に作成されたIDを返します。つまり、Pervasiveでは、既存のターゲット接続オブジェクトを使用してこのステートメントを実行する必要があります。

しかし、それを行う方法は?JDImportまたはDJExportオブジェクトが必要になることは間違いありませんが、Pervasiveがレコードを挿入する現在の接続に関連付けられたオブジェクトを取得するにはどうすればよいですか?

または、他のテーブルのIDを参照する必要がある場合に、この自動増分を処理する他の方法はありますか?

4

2 に答える 2

0

この投稿を調べて答えを知りたい人がいるとしたら、それは「できません」です。Pervasiveは、データベースのクエリに使用する独自の接続オブジェクトへのアクセスを許可しません。アクセスがないと、正しいIDを取得することを保証できません。解決策は次のとおりです。Before-Transformationイベントで呼び出したストアドプロシージャを使用して、ヘッダーレコードを作成し、IDとオプションのエラーメッセージをテーブルとして返しました。これを実行すると、IDが返され、保存してマッピング全体で使用します。

于 2011-10-12T08:24:26.210 に答える
0

Pervasiveでどのように機能するかはわかりませんが、@@identityで問題が発生する可能性があります。Scope_identity()はおそらくより安全ですが、Pervasiveではまだ機能しない可能性があります。

うまくいけば、テーブルには生成されたIDに加えて自然キーがあります。その場合、自然キーに基づいてIDを選択できます。これにより、異なるセッションとスコープで発生する可能性のある問題を回避できます。

于 2011-08-16T20:40:29.247 に答える