Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL server中的XML比较(字符串)_Sql_Sql Server_Xml - Fatal编程技术网

SQL server中的XML比较(字符串)

SQL server中的XML比较(字符串),sql,sql-server,xml,Sql,Sql Server,Xml,我在两个单独的表中有两个XML字符串 **ROOT** **Node ID=** 1 **name** vignesh **/name** **street** 1211 **/street** **/Node** **Node ID=** 2 **name** ram **/name** **street** 333 **/street** **/Node** **/ROOT** 请帮助我在SQL Server中查找这两个XML之间的比较,并将结果作为ID1和ID2Nod

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

**ROOT**

**Node ID=** 1

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

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

**/Node**


**Node ID=** 2

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

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

**/Node**

**/ROOT**

请帮助我在SQL Server中查找这两个XML之间的比较,并将结果作为ID1和ID2Node的旧值和新值给出。

我相信这将对您有所帮助。我通过考虑您的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 kolaDo你每次都会得到不同的标签。?或者那100多个标签是固定的?我每次都会收到不同的标签。不是固定的。虽然你每次都会得到不同的标签,但是你会有相同的父标签吗?即;根标记,也请您发布一些示例XML以供我们理解。DECLARE@XMLString1 XML='1 vignesh 1211。 . . . . 2 ram 333。 . . . . '
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