C# 如何在sql server中更新xml列中的元素名称
我的表中有一个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>
<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标记,并完成该操作。很抱歉,我无法测试它,但我想给您发送一个快速响应,让您更改尝试。