gpt4 book ai didi

sql-server - SQL Server - 查询缺少命名空间的 XML 列

转载 作者:行者123 更新时间:2023-12-04 16:53:31 25 4
gpt4 key购买 nike

这个问题看起来真的很讨厌。我在名为“消息”的列中有以下小 XML,我想对其进行查询。我遇到的问题是“ClaimData”元素。如您所见,它将其命名空间设置为空字符串。

<DataExchange xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.abc.com/library/DataExchange">
<Data>
<ClaimData xmlns="">
<CurrentClaimNumber>TEST0000319001</CurrentClaimNumber>
</ClaimData>
</Data>
</DataExchange>

下面的查询为 XML 列返回 NULL 值,因为 ClaimData 元素使用空命名空间,我不知道如何在 XML 列的查询中指出这一点。

有人可以提供一个工作(并希望经过测试)示例来说明如何查询 XML Message 列中的“CurrentClaimNumber”元素(它是“ClaimData”的子元素)?

非常非常非常感谢。
WITH XMLNAMESPACES (
'http://www.w3.org/2001/XMLSchema' AS "xsd",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi",
DEFAULT 'http://schemas.rising.com/library/DataExchange'
) SELECT [StoredMessageID],
Message.value('(/DataExchange/Data/ClaimData/CurrentClaimNumber)[1]', 'CHAR(750)')
FROM [DataExchange].[dbo].[MessageStorage]

最佳答案

如何将默认命名空间分配给前缀,以便您可以使用空命名空间而不使用前缀?这可能是唯一的选择:

WITH XMLNAMESPACES (
'http://www.w3.org/2001/XMLSchema' AS "xsd",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi",
'http://schemas.abc.com/library/DataExchange' AS "de"
) SELECT [StoredMessageID],
Message.value('(/de:DataExchange/de:Data/ClaimData/CurrentClaimNumber)[1]',
'CHAR(750)')
FROM [DataExchange].[dbo].[MessageStorage]

验证如下:
insert into MessageStorage values('
<DataExchange
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.abc.com/library/DataExchange">
<Data>
<ClaimData xmlns="">
<CurrentClaimNumber>TEST0000319001</CurrentClaimNumber>
</ClaimData>
</Data>
</DataExchange>');


WITH XMLNAMESPACES (
'http://www.w3.org/2001/XMLSchema' AS "xsd",
'http://www.w3.org/2001/XMLSchema-instance' AS "xsi",
'http://schemas.abc.com/library/DataExchange' AS "de"
) SELECT [StoredMessageID],
Message.value('(/de:DataExchange/de:Data/ClaimData/CurrentClaimNumber)[1]',
'CHAR(750)')
FROM [dbo].[MessageStorage]

结果:
 1     TEST0000319001

关于sql-server - SQL Server - 查询缺少命名空间的 XML 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15398936/

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