Sql server SQL Server-缺少命名空间的查询XML列
这个问题看起来真的很严重。我在一个名为“Message”的列中有下面的小XML,我想对它进行查询。我遇到的问题是“ClaimData”元素。如您所见,它将其名称空间设置为空字符串Sql server SQL Server-缺少命名空间的查询XML列,sql-server,xml,namespaces,Sql Server,Xml,Namespaces,这个问题看起来真的很严重。我在一个名为“Message”的列中有下面的小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 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 [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]
我最初的XML有点错误。名称空间应该出现在打开的DataExchange元素中。我认为你在回答时没有注意到这一点。您的解决方案不起作用,因为ClaimData元素未使用默认命名空间。它使用了一个空的(即缺少的)名称空间。它使用了一个空的名称空间。我知道这一点。如果指定默认名称空间,则无法访问空名称空间。你试过我的解决方案吗,或者只是假设它不起作用?我试过了,但似乎我犯了一个错误。事实上,它确实有效。非常感谢你。这节省了我很多时间。
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