我有一个我正在阅读的csv文件并为其生成XML字符串。然后,我将该XML字符串发送到存储过程并解析出来。
SELECT ParamValues.x2.value('empID[1]', 'VARCHAR(60)'),
ParamValues.x2.value('transactionID[1]', 'VARCHAR(100)'),
ParamValues.x2.value('emailAddress[1]', 'VARCHAR(100)'),
ParamValues.x2.value('paymentStatus[1]', 'VARCHAR(100)'),
ParamValues.x2.value('shirtSize[1]', 'VARCHAR(20)'),
ParamValues.x2.value('paymentAmount[1]', 'VARCHAR(20)'),
ParamValues.x2.value('paymentDate[1]', 'DATETIME')
FROM @xmlData.nodes('/orders/order') AS ParamValues(x2)
从这里开始,我需要遍历一个表,看看paymentStatus是否已经完成。如果没有,那么我们将使用从XML值获得的数据更新该行。
从这一点来看,最好的方法是什么?
答案 0 :(得分:0)
循环中你应该只能运行带有XML连接的UPDATE
语句。
UPDATE target
SET [paymentStatus] = source.[data].value('paymentStatus[1]', 'VARCHAR(100)')
FROM [Orders] target
INNER JOIN @xmlData.nodes('/orders/order') AS source ([data])
ON --?? How do you match nodes in the XML to rows in the table?
-- Maybe..
source.[data].value('orderID[1]', 'INT') = target.[OrderId] -- ??
WHERE target.[paymentStatus] <> 'Completed'