【问题标题】:How can I update multiple XML fields with MSSQL?如何使用 MSSQL 更新多个 XML 字段?
【发布时间】:2015-06-08 19:06:57
【问题描述】:

表名称:TBL_CLIENTS 表字段:XMLDATA

<REPORT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DESCRIPTION="TestClient" FILENUM="1234">
  <!--<REPORT DESCRIPTION="TestClient" FILENUM="1234">-->
  <TRACKING>
    <FIRSTNAME>Bobby</FIRSTNAME>
    <LASTNAME>Butcher</LASTNAME>
  </TRACKING>
</REPORT>

我想同时更改 FIRSTNAME 和 LASTNAME。无论如何我可以在一个查询中做到这一点吗?我能弄清楚的唯一方法是使用两个查询。

UPDATE TBL_CLIENTS
SET [XMLDATA].modify('replace value of (/REPORT/TRACKING/FIRSTNAME/text())  [1] with ("Franny")')
WHERE ORDERID = 5

UPDATE TBL_CLIENTS
SET [XMLDATA].modify('replace value of (/REPORT/TRACKING/LASTNAME/text())[1]  with ("Farmer")')
WHERE ORDERID = 5

【问题讨论】:

    标签: sql-server xml sql-server-2008


    【解决方案1】:

    这是不可能的 - 根据MSDN,replace 必须在 XML 节点的单个实例上工作 - 但您可以避免在表上这样做两个 UPDATEs:

    DECLARE @doc xml = '<REPORT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DESCRIPTION="TestClient" FILENUM="1234">
      <!--<REPORT DESCRIPTION="TestClient" FILENUM="1234">-->
      <TRACKING>
        <FIRSTNAME>Bobby</FIRSTNAME>
        <LASTNAME>Butcher</LASTNAME>
      </TRACKING>
    </REPORT>';
    
    DECLARE @t table (xmldata xml);
    
    insert @t (xmldata) values (@doc);
    
    -- grab the XML data from the table for manipulation...
    DECLARE @xmlData xml;
    SELECT @xmlData = xmldata FROM @t;
    
    set @xmlData.modify('replace value of (/REPORT/TRACKING/FIRSTNAME/text())  [1] with ("Franny")')                   
    set @xmlData.modify('replace value of (/REPORT/TRACKING/LASTNAME/text())   [1] with ("Farmer")')
    
    -- now we only need to do one update on the table itself.
    UPDATE @t 
    SET [XMLDATA] = @xmlData
    
    SELECT * FROM @t;
    

    我知道这并不完全符合您的要求,但它应该会减少锁定时间并提高桌面性能 - 如果这是您的目标的话。

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 2021-05-22
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多