我一直在尋找,我還沒有找到一個使用合併填充相關表的示例。如何使用SQL合併填充主詳細信息相關表
The Northwind DB Order
& OrderDetail
表可以被使用。 (在我們的場景中,我們的表格有3個深度。)
爲了簡單起見,假設我們有以下表格。
訂單
OrderID PK
OrderNumber
訂單明細
OrderID - PK
OrderLineItemNumber PK - FK to Orders.OrderID field
OrderDetailDetails
OrderID - PK - FK to OrderDetails.OrderID
OrderLineItemNumber - PK - FK to OrderDetails.OrderLineItemNumber
OrderSequenceNumber - PK
另外,在第是場景,記錄被寫入與上述表格相同的登臺表中。合併需要將3個登臺表中的記錄合併到3個匹配的生產表中。
製作Order
表的OrderId
將不會共享Order
表OrderId
表的值。
因此,如果合併條件都滿足,那麼就必須有一個插入到Order
表來生成OrderId
(集身份),因爲需要對將要創建的OrderDetail
& OrderDetailDetails
行OrderId
。
現在我已經用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語句早些時候,我只是想通了,我只好換行選擇括號()。
感謝大家的幫助。我希望我可以隨身攜帶這對我來說第三張桌子。
** **什麼數據庫和哪個版本? ** SQL **只是結構化查詢語言(Structured Query Language) - 許多數據庫系統使用的語言 - SQL是** NOT **數據庫產品......類似這樣的東西通常是供應商特定的 - 所以我們真的需要知道什麼你正在使用的數據庫系統.... –
你似乎誤解了'OUTPUT ... INTO'的概念。請看看這個問題:[使用merge..output獲取source.id和target.id之間的映射](http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping -between-source-id-and-target-id),據我所知,它基本上就是你想要做的事情。以防萬一,您可能還需要手頭有['MERGE'手冊](http://msdn.microsoft.com/zh-cn/library/bb510625.aspx「MERGE(Transact-SQL)」)。 –
剛剛看到你的插入問題。這是一個句法問題。讓我們知道它是否適用於第三張桌子。如果不是,我會幫你的。 – usr