0

我有一个这样的 XML:

<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即列。

如果每个片段不存在,则此存储过程必须插入​​每个片段,如果该片段已经存在于 table 中,则必须更新它X。在上面的示例中,一旦操作员修复了机器中的错误并重新运行作业,状态可能会显示为 OK for PieceID 0002。在这种情况下,PieceID=0001应该忽略。

如果只有一块要处理(MERGESQL Server 2008 中的命令?),我知道该怎么做;我无法有效地完成几百件。

请为这个问题提出一种有效的方法。谢谢你。

4

1 回答 1

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)
于 2012-09-13T23:01:03.570 回答