• <bdo id='js908'></bdo><ul id='js908'></ul>

    <tfoot id='js908'></tfoot>
    1. <legend id='js908'><style id='js908'><dir id='js908'><q id='js908'></q></dir></style></legend>

      <small id='js908'></small><noframes id='js908'>

        <i id='js908'><tr id='js908'><dt id='js908'><q id='js908'><span id='js908'><b id='js908'><form id='js908'><ins id='js908'></ins><ul id='js908'></ul><sub id='js908'></sub></form><legend id='js908'></legend><bdo id='js908'><pre id='js908'><center id='js908'></center></pre></bdo></b><th id='js908'></th></span></q></dt></tr></i><div id='js908'><tfoot id='js908'></tfoot><dl id='js908'><fieldset id='js908'></fieldset></dl></div>

        替换存储在 SQL Server 数据库列中的 XML 中的节点名

        时间:2023-06-07
        <legend id='78gs5'><style id='78gs5'><dir id='78gs5'><q id='78gs5'></q></dir></style></legend>
          <tfoot id='78gs5'></tfoot>
        • <i id='78gs5'><tr id='78gs5'><dt id='78gs5'><q id='78gs5'><span id='78gs5'><b id='78gs5'><form id='78gs5'><ins id='78gs5'></ins><ul id='78gs5'></ul><sub id='78gs5'></sub></form><legend id='78gs5'></legend><bdo id='78gs5'><pre id='78gs5'><center id='78gs5'></center></pre></bdo></b><th id='78gs5'></th></span></q></dt></tr></i><div id='78gs5'><tfoot id='78gs5'></tfoot><dl id='78gs5'><fieldset id='78gs5'></fieldset></dl></div>

          <small id='78gs5'></small><noframes id='78gs5'>

            <tbody id='78gs5'></tbody>

            • <bdo id='78gs5'></bdo><ul id='78gs5'></ul>

                  本文介绍了替换存储在 SQL Server 数据库列中的 XML 中的节点名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  限时送ChatGPT账号..

                  我想知道如何替换存储在 SQL Server 数据库中的 xml 中的子节点名称

                  I'd like to know how I can replace a child node name in a xml that I stored in my SQL Server database

                  示例 XML

                  <CompanyStatus>
                   <ProductionServers>
                    <ProductionServer>
                      <Patch>0</Patch>
                      <Status>Green</Status>
                      <Test_Node>Yes</Test_Node>
                   </ProductionServers>
                    </ProductionServer>
                  </CompanyStatus>
                  

                  我将如何将其更改为以下内容:

                  How would I change that to the following:

                  <CompanyStatus>
                   <ProductionServers>
                    <ProductionServer>
                      <Patch>0</Patch>
                      <Status>Green</Status>
                      <Live_Node>Yes</Live_Node>
                   </ProductionServers>
                    </ProductionServer>
                  </CompanyStatus>
                  

                  基本上唯一的变化是 被重命名为 但值是相同的.

                  Where essentially the only change is <Test_Node> is renamed to <Live_Node> but the value is the same.

                  有没有简单的方法可以做到这一点?

                  Is there a simple way to do this?

                  我的数据库中有大约 1000 条记录

                  I have about 1000 records in my database

                  推荐答案

                  这是我的建议

                  • 使用属性保存
                  • 容忍元素的位置(只要这个元素是唯一的)

                  检查一下:

                  DECLARE @xml XML=
                  N'<CompanyStatus>
                   <ProductionServers>
                    <ProductionServer>
                      <Patch>0</Patch>
                      <Status>Green</Status>
                      <Test_Node a="x" b="y" c="z">Yes</Test_Node>
                   </ProductionServer>
                    </ProductionServers>
                  </CompanyStatus>';
                  

                  --这将创建带有新元素名称 及其所有属性(如果有):

                  --This will create the <Test_Node> with all its attributes (if there are any) with the new element name <Live_Node>:

                  DECLARE @NewNode XML=
                      (
                       SELECT @xml.query(N'let $nd:=(//*[local-name()="Test_Node"])[1]
                                           return
                                           <Live_Node> {$nd/@*}
                                           {$nd/text()}
                                           </Live_Node>
                                          ')
                      );
                  

                  --这将首先在原始之后直接插入"@NewNode",并将删除原始:

                  --this will first insert the "@NewNode" directly after the original, and will remove the original:

                  SET @xml.modify(N'insert sql:variable("@NewNode") after (//*[local-name()="Test_Node"])[1]');
                  SET @xml.modify(N'delete (//*[local-name()="Test_Node"])[1]');
                  
                  SELECT @xml;
                  

                  结果

                  <CompanyStatus>
                    <ProductionServers>
                      <ProductionServer>
                        <Patch>0</Patch>
                        <Status>Green</Status>
                        <Live_Node a="x" b="y" c="z">Yes</Live_Node>
                      </ProductionServer>
                    </ProductionServers>
                  </CompanyStatus>
                  

                  更新:与使用可更新 CTE 的表格数据相同:

                  DECLARE @xmlTable TABLE (YourXml XML);
                  INSERT INTO @xmlTable VALUES
                  (--Test_Node has got attributes
                  N'<CompanyStatus>
                   <ProductionServers>
                    <ProductionServer>
                      <Patch>0</Patch>
                      <Status>Green</Status>
                      <Test_Node a="x" b="y" c="z">Yes</Test_Node>
                   </ProductionServer>
                    </ProductionServers>
                  </CompanyStatus>'
                  )
                  ,( --different position, no attributes
                  N'<CompanyStatus>
                   <ProductionServers>
                      <Test_Node>Yes</Test_Node>
                    <ProductionServer>
                      <Patch>0</Patch>
                      <Status>Green</Status>
                   </ProductionServer>
                    </ProductionServers>
                  </CompanyStatus>'
                  )
                  ,( --No test node at all
                  N'<CompanyStatus>
                   <ProductionServers>
                    <ProductionServer>
                      <Patch>0</Patch>
                      <Status>Green</Status>
                   </ProductionServer>
                    </ProductionServers>
                  </CompanyStatus>'
                  );
                  

                  --可更新的 CTE 返回原始节点和新节点.这可以一次性更新:

                  --the updateable CTE returns the original and the new node. This can be updated in one go:

                  WITH ReadNode AS
                  (
                      SELECT t.YourXml.query(N'let $nd:=(//*[local-name()="Test_Node"])[1]
                                          return
                                          <Live_Node> {$nd/@*}
                                          {$nd/text()}
                                          </Live_Node>
                                      ') AS NewNode
                           ,t.YourXml AS Original
                      FROM @xmlTable AS t
                  )
                  UPDATE ReadNode SET Original.modify(N'insert sql:column("NewNode") after (//*[local-name()="Test_Node"])[1]');
                  
                  UPDATE @xmlTable SET YourXml.modify(N'delete (//*[local-name()="Test_Node"])[1]');
                  
                  SELECT *
                  FROM @xmlTable 
                  

                  这篇关于替换存储在 SQL Server 数据库列中的 XML 中的节点名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:xquery 返回元素名称 下一篇:如何使用 XQuery 模拟 STRING_AGG()(分组字符串连接

                  相关文章

                  最新文章

                  <small id='Fu2R0'></small><noframes id='Fu2R0'>

                      <bdo id='Fu2R0'></bdo><ul id='Fu2R0'></ul>
                    <tfoot id='Fu2R0'></tfoot>
                  1. <i id='Fu2R0'><tr id='Fu2R0'><dt id='Fu2R0'><q id='Fu2R0'><span id='Fu2R0'><b id='Fu2R0'><form id='Fu2R0'><ins id='Fu2R0'></ins><ul id='Fu2R0'></ul><sub id='Fu2R0'></sub></form><legend id='Fu2R0'></legend><bdo id='Fu2R0'><pre id='Fu2R0'><center id='Fu2R0'></center></pre></bdo></b><th id='Fu2R0'></th></span></q></dt></tr></i><div id='Fu2R0'><tfoot id='Fu2R0'></tfoot><dl id='Fu2R0'><fieldset id='Fu2R0'></fieldset></dl></div>
                    1. <legend id='Fu2R0'><style id='Fu2R0'><dir id='Fu2R0'><q id='Fu2R0'></q></dir></style></legend>