【问题标题】:XML Comparison(String) in SQL serverSQL Server 中的 XML 比较(字符串)
【发布时间】:2020-01-06 10:29:21
【问题描述】:

我在两个单独的表中有两个 XML 字符串。

**ROOT**

**Node ID=** 1

**name** vignesh **/name**

**street** 1211 **/street**

**/Node**


**Node ID=** 2

**name** ram **/name**

**street** 333 **/street**

**/Node**

**/ROOT**

**ROOT**

**Node ID=** 1

**name** newbie **/name**

**street** 121223 **/street**

**/Node**


**Node ID=** 2

**name** pro **/name**

**street** 445**/street**

**/Node**

**/ROOT**

请帮助我在 SQL Server 中找到这两个 XML 之间的比较,并给出 ID1 和 ID2(Node) 的旧值和新值的结果。

【问题讨论】:

    标签: sql sql-server xml


    【解决方案1】:

    我相信这会对你有所帮助。我通过考虑您的 XML 数据来构建适当的 XML 结构。

    DECLARE @XMLString1 XML =
    '<ROOT>
      <Nodes>
        <NodeID>1</NodeID>
        <name>vignesh </name>
        <street>1211</street>
      </Nodes>
      <Nodes>
        <NodeID>2</NodeID>
        <name>ram</name>
        <street>333</street>
      </Nodes>
    </ROOT>' ,
    
    @XMLString2 XML =
    '<ROOT>
      <Nodes>
        <NodeID>1</NodeID>
        <name>newbie </name>
        <street>121223</street>
      </Nodes>
      <Nodes>
        <NodeID>2</NodeID>
        <name>pro</name>
        <street>445</street>
      </Nodes>
    </ROOT>'
    
    SELECT @XMLString1,@XMLString2
    
    ;WITH XMLDATA1 AS 
        (
        SELECT T.X.value('NodeID[1]','varchar(50)') AS NODEID,
               T.X.value('name[1]','varchar(50)') AS NAME,
               T.X.value('street[1]','varchar(50)') AS STREET
         FROM @XMLString1.nodes('/ROOT/Nodes')T(X)
        )
    ,XMLDATA2 AS 
        (
        SELECT T.X.value('NodeID[1]','varchar(50)') AS NODEID,
               T.X.value('name[1]','varchar(50)') AS NAME,
               T.X.value('street[1]','varchar(50)') AS STREET
         FROM @XMLString2.nodes('/ROOT/Nodes')T(X)
        )
        SELECT X1.NODEID,X1.NAME AS OLD_NAME,X2.NAME AS NEW_NAME , X1.STREET AS OLD_STREET , X2.STREET AS NEW_STREET
        FROM XMLDATA1 X1
        INNER JOIN XMLDATA2 X2 ON X1.NODEID=X2.NODEID
    

    【讨论】:

    • 我从用户本身获取 XML 字符串作为输入。所以我不知道标签的名称以及如果有 100 个 XML 标签怎么办。 @mahesh-kola
    • 你每次得到不同的标签吗?否则那 100 多个标签是固定的?
    • 我每次都得到不同的标签。没有固定的。
    • 虽然你每次都得到不同的标签,但你会有相同的父标签吗? IE; Root tag 也请您发布一些您的示例 XML 以供我们理解。
    • DECLARE @XMLString1 XML = '1vignesh 1211 。 . . . . 2ram333 。 . . . . '
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多