2011-08-16 3 views
0

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

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

テーブルの分割キーと他のテーブルの作成されたレコードへの参照については、データベースが作成したidが必要です。そのために、私は答えを見つけました。私は "select @@ identity"を使うことができます現在の接続に対して最も最近作成されたIDを返します。つまり、Pervasiveでは、すでに存在するターゲット接続オブジェクトを使用してこのステートメントを実行する必要があります。

しかし、それを行う方法は? JDImportまたはDJExportオブジェクトが必要ですが、Pervasiveがレコードを挿入する現在の接続に関連付ける方法はありますか?

他のテーブルのIDを参照する必要がある場合、この自動インクリメントを処理する他の方法はありますか?

答えて

0

この記事を見ている人がいて、答えが不思議だとすれば、それは「できません」です。 Pervasiveでは、データベースへのクエリに使用する独自の接続オブジェクトへのアクセスを許可しません。それにアクセスできない場合、正しいIDを取得することは保証できません。私たちのソリューションは次のとおりです。ヘッダーレコードを作成し、idとオプションのエラーメッセージをテーブルとして返したBefore-Transformationイベントで呼び出されたストアドプロシージャを使用しました。私たちはそれを実行し、私たちがマッピングして保存して使用するidを返します。

0

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

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

+0

通常、テーブルには手動で入力するキーはありません。これをRDBMSに残します。それでも、scope_identity()に関する提案は有効です。私は一見しました。トリガーに行を挿入するスコープが衝突することはありません。したがって、両方のステートメントは同じIDを提供する必要があります。 – 0xCAFEBABE

関連する問題