TSQL XML检查表中的记录

时间:2014-05-15 20:52:49

标签: sql-server xml tsql

我有一个我正在阅读的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值获得的数据更新该行。

从这一点来看,最好的方法是什么?

1 个答案:

答案 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'