これらのステージング テーブルがあります。
- 注文 (PK=OrderID)、
- SubOrder (PK=SubOrderID、FK=OrderID) および
- アイテム (PK=ItemID、FK1=SubOrderID、FK2=OrderID)。
クライアントで関係を確立しました (C#.NET と、SQLBulCopy を使用して SQL Server のステージング テーブルにテーブルをコピーしました)。
ここで、サーバー上で親子関係を確立する必要があります。
私はそれを実行できるスクリプトを持っています (私は OUTPUT ステートメントを Insert ステートメントと共に使用しており、後で子行を挿入するために使用する一時テーブルに PK を出力しています)。
最初に、クライアントで確立された孫と親 (アイテムと注文) の間に外部キー関係があったことに注意してください。
サブオーダーは数量制限として導入されます (出荷ボックスに収まる最大アイテムとして想像してください。すべてのアイテムは同じサイズです。私の場合、アイテム行は同じサイズです。)
主な問題: Production テーブルに何万もの項目を挿入することができます。それらを OrderP、SubOrderP、および ItemP と呼びましょう。また、挿入されたばかりの親 PK を保持する OrderPWithRealPK および SubOrderPWithRealPK という一時テーブルも動的に生成します。
注文は 1 つ、サブオーダーは 1 つ、アイテムは 1 つ、またはそのように何度も持つことができます。または、オーダー 1 つ、サブオーダーを 10 つ、各サブオーダーに最大 100 のアイテム要素を含めることができます (したがって、(n) Order 、(m) SubOrder および ( k) アイテムの要素が予測できない。
以下の表には、これらのパラメーターがあります。
- N=7 次数
- M=14 サブオーダーの数
- K=23 アイテム数
- L=2 サブオーダー内のアイテムの最大数
- J = 約。トランザクションに挿入されるアイテムの数。(ただし、含まれるアイテムは同じオーダーに属している必要がありますが、同じサブオーダーにまとめても問題ない場合があります)
P=いいえ。最大注文のアイテムの数。(これにより、可能な数を駆動J
できますが、より大きな Order-s がある場合に限ります)。
多くの小さな Order-s がある場合、J は事前に決定できます。(この例では約 10)
(K) 個のアイテムを指定して、トランザクションに一度に挿入できる要素の比較的等しいバケットを作成したいと考えていますが、親と一緒に、できれば祖父母と一緒に送信する必要があります。
現在、私は最初に「TR」値(「取引中」を表す)を持つ特別なフィールドを挿入し、挿入を行い、そのフィールドに「00」で更新を行って、注文に属するすべてのアイテムを示す手動トランザクションを持っています。挿入され、値 '00' の特別なフィールドを照会する他のプロセスです。これを回避できれば良いのですが。自動取引(Begin Trans/End Trans)を行う場合はSubOrderレベルまで取引範囲を持たせれば良いと思います
以下のテーブルがある場合、Item テーブルに保存するときに、これらの順序を持つアイテムをまとめたいとします (もちろん、Item PK は OUTPUT 句で生成されます): - 1、3、4、および 5 ( 9項目) - 2 (9項目) - 6、7 (4項目)
注文は任意の順序で挿入できますが、できれば Suborder 要素と Items 要素は作成された順序で挿入する必要があります。While ループと TOP (Z) および適切な結合クエリを使用して、アイテム (親に属する孫および関連する子要素) をトランザクションに挿入することを想像してください。
SeqNo OrderID SubOrder ItemID アイテム数 -------------------------------------------------- ---------------------------------- 01 1 1 100 2 02 1 1 101 ================================================== == 03 2 2 201 9 04 2 2 202 05 2 3 301 06 2 3 302 07 2 4 401 08 2 4 402 09 2 5 501 10 2 5 502 11 2 6 503 ================================================== = 12 3 7 601 2 13 3 7 602 ================================================== = 14 4 8 801 1 ================================================== = 15 5 9 901 5 16 5 9 902 17 5 10 1001 18 5 10 1002 19 5 11 1201 ================================================== 20 6 12 1201 1 ================================================== 21 7 13 1301 3 22 7 13 1302 23 7 14 1401