私は最近、数量値引き割引をインポートするSageインポートツールを作成することを任されました。問題のセージ200 - アイデンティティ列の代わりのカウンターテーブル - 異常な動作
セージ200のテーブルは以下のとおりです。
- StockItem - 商品メイン表
- StockItemDiscount - メイン割引表
- StockItemQtyDiscBreak - ディスカウント数量価格
私はボアしません私の質問には関係ないので、スキーマ情報を持っているなら、3つのテーブルすべての主キーがアイデンティティが設定されていないBigInt です。StockItemには多くの割引があり、1割引には多くの数量割引があります。
それでは、インポートルーチンを作成するために、sage(SQLプロファイラを使用)で手動で割引と改行を作成した場合、Sage 200がSQLに対して行ったことを分析しなければなりませんでした。私が言うように、Sage 200はアイデンティティ列を使用せず、代わりにカウンタテーブルを使用します。 StockItemDiscountに新しい行を挿入
は、以下でした
UPDATE [Counter] SET [NextValue] = [NextValue] + 10 WHERE [CounterID] = 1
を次に新しいIDを選択:
SELECT NextValue FROM Counter WHERE CounterID = 1
それは、それがちょうどから選択された新しい値を使用して新しい行を挿入しますカウンタ:
INSERT INTO StockItemDiscount (StockItemDiscountID, /.../) VALUES (@NewID, /.../)
私の質問はです:セージはなぜこのようにしていますか?おそらくそれの背後にある理由は何でしょうか? (具体的には値を読み取るときに+10を加えた値)
すべてのテーブルが同じカウンタを共有しているので、1つのテーブルの5行で別のテーブルのIDにギャップが生じます。彼らがなぜこれを好きにするのか?
iが尋ねる理由:StockItemDiscount
に行を挿入した後、私はその後、&インサート置換に関連するすべての行を削除する必要がある - しかし、SQLプロファイラを使用して、iが5以上を挿入しない限り、私は、カウンタテーブルの増分参照カントディスカウント(6回目は再びカウンターテーブルに当たってしまいますが、セージUIがそれらの10個のIDを使用してさまざまなインサートを予約していて、必要に応じてさらに10個を予約しているかのようになります。 ?
おそらく彼らは移植性の理由からこれを行ったでしょう。 – PepperBob
ああ、一度に10のIDを割り当てると、一括挿入を実行するとデータベースの負荷が減少します。 – PepperBob
私はそれが事実かもしれないと思う(SageはSQLサーバー製品として200を大胆に販売しているが) - 私はセージ200を内外に知っている人が私に良い答えを与えることができるか、これらの新しい行を挿入します。 – HeavenCore