2012-09-13 81 views
0

我有一個這樣的XML:MERGE命令插入或更新

<Job> 
<Piece PieceID="0001"> 
    <OperatorID>O1</OperatorID> 
    <MachineID>M1</MachineID> 
<Status>OK</Status> 
</Piece> 
<Piece PieceID="0002"> 
    <OperatorID>O1</OperatorID> 
    <MachineID>M1</MachineID> 
<Status>ERROR</Status> 
</Piece> 
</Job> 

此XML經由XML類型參數傳遞到其中對其進行解析,並在單獨的列中存儲的值的存儲的過程一個表 - PieceID, OperatorID, MachineID, Status是列。

如果該存儲過程不存在或者如果該塊已經存在於表X中,則該存儲過程必須插入​​每個片段。在上面的示例中,一旦操作員修復了機器中的錯誤並重新開始工作,狀態可能爲PieceID 0002確定。在這種情況下,PieceID=0001應該被忽略。

我知道如果只有一塊要處理(SQL Server 2008中的MERGE命令?),該怎麼辦?我無法讓我的頭腦高效地做幾百件。

請爲這個問題提出一個有效的方法。謝謝。

回答

1

您可以使用MERGE更新數據,而不僅僅是單一的行批:

MERGE [TargetTable] 
USING [SourceTable] 
ON [TargetTable].PieceId= [SourceTable].PieceId 
WHEN MATCHED AND status <> [SourceTable].Status THEN 
UPDATE SET status = [SourceTable].Status 

而且你可以使用新的數據,例如一個INSERT

INSERT ..... WHERE PieceId NOT IN (SELECT PieceId FROM targetTable)