Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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
C# 如何在sql server中更新xml列中的元素名称_C#_Sql Server_Xml_Sqlxml - Fatal编程技术网

C# 如何在sql server中更新xml列中的元素名称

C# 如何在sql server中更新xml列中的元素名称,c#,sql-server,xml,sqlxml,C#,Sql Server,Xml,Sqlxml,我的表中有一个xml列,如下所示: <info> <teacher> <name>John</name> </teacher> <StInfo> <name>William</name> <address>India</address>

我的表中有一个xml列,如下所示:

   <info>
      <teacher>     
            <name>John</name>   
      </teacher>
      <StInfo>
        <name>William</name>    
        <address>India</address>    
      </StInfo>
    </info>
我只需要更新到

 <info>
          <teacher>     
                <name>John</name>   
          </teacher>
          <Student>
            <name>William</name>    
            <address>India</address>    
          </Student>
        </info>

我使用您的数据在SQL Server中为您构建了一个示例:

DECLARE @StackExample TABLE (
     Id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT(NEWID())
    ,XmlColumn XML
)

INSERT INTO @StackExample(XmlColumn) VALUES('<info>
  <StInfo>
    <name>William</name>    
    <address>India</address>    
  </StInfo>
</info>')


UPDATE T
SET XmlColumn = XmlColumn.query('<info>
  <Student>
  {info/StInfo/*}
  </Student>
</info>')
FROM @StackExample t

SELECT * FROM @StackExample

我希望这能有所帮助

我已经使用您的数据在SQL Server中为您构建了一个示例:

DECLARE @StackExample TABLE (
     Id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT(NEWID())
    ,XmlColumn XML
)

INSERT INTO @StackExample(XmlColumn) VALUES('<info>
  <StInfo>
    <name>William</name>    
    <address>India</address>    
  </StInfo>
</info>')


UPDATE T
SET XmlColumn = XmlColumn.query('<info>
  <Student>
  {info/StInfo/*}
  </Student>
</info>')
FROM @StackExample t

SELECT * FROM @StackExample

我希望这能有所帮助

据我所知,没有办法用SQL DML修改xml元素名称。您可以在转换为varchar后替换它:

update Table1 set
    data = cast(
      replace(
        replace(
          cast(data as nvarchar(max)),
        '</StInfo>', '</Student>'
        ),
      '<StInfo>', '<Student>'
      )
    as xml)
或者,您可以使用XQuery重建xml:

update Table1 set
    data = data.query('<info>{
                for $i in info/StInfo
                return element Student {$i/*}
                }</info>'
    )
这些方法甚至适用于多个元素


据我所知,无法使用SQLDML修改xml元素名称。您可以在转换为varchar后替换它:

update Table1 set
    data = cast(
      replace(
        replace(
          cast(data as nvarchar(max)),
        '</StInfo>', '</Student>'
        ),
      '<StInfo>', '<Student>'
      )
    as xml)
或者,您可以使用XQuery重建xml:

update Table1 set
    data = data.query('<info>{
                for $i in info/StInfo
                return element Student {$i/*}
                }</info>'
    )
这些方法甚至适用于多个元素


它正在工作,但很抱歉,我没有给出完整的xml结构,因为还有一些其他元素在执行后被删除,我已经更新了xml。您只需在update语句中的标记之前添加{info/teacher},就完成了。很抱歉,我无法测试它,但我想给您发送一个快速响应,让您更改尝试。它正在工作,但很抱歉,我没有给出完整的xml结构,因为还有一些其他元素在执行后被删除,我有问题地更新了xml您只需添加{info/teacher}在update语句中添加before标记,并完成该操作。很抱歉,我无法测试它,但我想给您发送一个快速响应,让您更改尝试。