私は検索してきましたが、関連テーブルを作成するためにmergeを使用した例はまだありません。SQL Mergeの使用方法詳細のテーブル関連
ノースウィンDB Order
& OrderDetail
テーブルを使用することができます。 (このシナリオでは、テーブルの深さは3レベルです。)
簡単にするために、次の表があります。
OrderID - PK - FK to OrderDetails.OrderID
OrderLineItemNumber - PK - FK to OrderDetails.OrderLineItemNumber
OrderSequenceNumber - PK
また
注文
OrderID PK
OrderNumber
たOrderDetails
OrderID - PK
OrderLineItemNumber PK - FK to Orders.OrderID field
OrderDetailDetails、目にシナリオでは、レコードは上記のテーブルと同じステージングテーブルに書き込まれます。マージでは、3つのステージングテーブルのレコードを3つの一致するプロダクションテーブルにマージする必要があります。
生産Order
テーブルのOrderId
は、ステージOrder
テーブルOrderId
の値を共有しません。
マージ条件が満たされている場合OrderId
を作成するOrderDetail
& OrderDetailDetails
行のために必要とされているので、だから、その後、OrderId
(アイデンティティのセット)を生成するためにOrder
テーブルへの挿入がなければなりません。
今私はC#でこれを行うサービスを書いていますが、それはそのようなものではありません。
MERGE
が見つかりましたので、このような状況で使用できるかどうかを調べています。任意のヒントやポインターを高く評価されます。
ありがとうございました。
編集:出力ストア値を@MergeOutputという一時テーブルに使用しています。
Declare @MergeOutput Table
(
ActionType varchar(10),
InsertedOrderId int,
StagingOrderID int,
DeletedOrderId int
);
However, I need to do a Merge on all 3 tables. (Order, OrderDetail & OrderDetailDetails)
Also, these tables have more fields than just the Id's.
So I've started creating the 2nd Merge for the OrderDetail table.
MERGE OrderDetail AS OD
USING(
SELECT OrderID,
OrderLineItemNumber,
ProductId
FROM OrderDetail AS OD
where OrderId IN (Select StagingOrderID from @MergeOutput where ActionType = 'INSERT'
) AS src(OrderID,
OrderLineItemNumber,
ProductId
)
ON (OD.OrderId = src.Order AND OD.OrderLineItemNumber = src.OrderLineItemNumber)
WHEN NOT MATCHED By Target THEN
INSERT INTO <-- (This doesn't work no matter what I've tried so far.)
Select (Select Distinct InsertedOrderID from @MergeOutput where StagingOrderId = OrderID), src.OrderLineItemNumber, src.ProductId
;
上記のコードでは、次のエラーが表示されます。私はすべての3つのテーブル
でレコードを移動するには、マージの機能が必要な
『に』キーワードの近くに 」不正な構文は、私が働いてこれを最後に持っているように。私は、Insert文を変更しなければならなかったルックス次のように。
Insert(OrderId, OrderLineItemId, ProductID)
Values((Select Distinct InsertedOrderID from @MergeOutput where StagingOrderId = OrderID), src.OrderLineItemNumber, src.ProductId)
私はちょうど)(私が選択括弧をラップしなければならなかった考え出した。みんなの助けを
おかげで。私は私が運ぶことができます願っています。それ以前にこのInsert文をしようとしましたこれは私の上に3番目のテーブルのrge。
**何**データベースとバージョン?? ** SQL **は多くのデータベースシステムで使用されている言語である構造化問合せ言語です - SQLはデータベース製品ではありません**このようなものはベンダー固有のものです。あなたが使っているデータベースシステム.... –
あなたは 'OUTPUT ... INTO'という概念を誤解しているようです。この質問を見てください:[merge..outputを使ってsource.idとtarget.idの間のマッピングを取得する](http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping -ource-id-and-target-id)は、私が見る限り、基本的にあなたがしようとしていることです。また場合によっては、['MERGE'マニュアル](http://msdn.microsoft.com/en-us/library/bb510625.aspx" MERGE(Transact-SQL) ")を手元に置く必要があるかもしれません。 –
挿入物の問題を見たことがあります。それは構文上の問題でした。それが第3のテーブルのために働いた場合は、私たちに知らせてください。そうでなければ、私はあなたを助けるでしょう。 – usr