gpt4 book ai didi

SQL Server XML 添加属性(如果不存在)

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:06 25 4
gpt4 key购买 nike

我正在尝试添加一个不存在的属性。它应该很简单,但我是 XML XPath/XQuery 等方面的新手,所以请原谅我的无知。

我希望能够传递 XML 数据并修改它...

ALTER FUNCTION [dbo].[ConvertXmlData](@xmlData XML)
RETURNS XML
AS
BEGIN
RETURN @xmlData.<something here>
END

如果我传递如下数据:

<something> 
this is sample data <xxx id="1"/> and <xxx id="2" runat="server" />. More <yyy id="3" />
</something>

我愿意

<something>
this is sample data <xxx id="1" runat="server" /> and <xxx id="2" runat="server" />. More <yyy id="3" />

</something>

而不是:

<something>
this is sample data <xxx id="1" runat="server" /> and <xxx id="2" runat="server" runat="server"/>. More <yyy id="3" />
</something>

最佳答案

你可以做到

SET @xmlData.modify('insert attribute runat { "server" } into descendant::xxx[not(@runat)][1]');

然而,这只会更改第一个没有 runat 属性的 xxx 后代,至少对于 SQL Server 2005,您一次只能修改一个节点。

也许将以上内容与 WHILE 相结合有助于例如

WHILE @xmlData.exist('descendant::xxx[not(@runat)]') = 1
BEGIN
SET @xmlData.modify('insert attribute runat { "server" } into descendant::xxx[not(@runat)][1]');
END

我无法访问 SQL Server 2008 R2,但我认为一次修改仍然仅限于一个节点,因此您可以尝试

ALTER FUNCTION [dbo].[ConvertXmlData](@xmlData XML)
RETURNS XML
AS
BEGIN
WHILE @xmlData.exist('descendant::xxx[not(@runat)]') = 1
BEGIN
SET @xmlData.modify('insert attribute runat { "server" } into descendant::xxx[not(@runat)][1]');
END
RETURN @xmlData
END

关于SQL Server XML 添加属性(如果不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com