2014-06-13 45 views
0

我有一列存储了XML数据。在这个数据里面,我需要在另外一个字段上报告field = xxxxSQL Server 2008 - 需要基于另一个XML值报告XML列中的值

这里是我的XML:

<?xml version="1.0" encoding="utf-16"?> 
<SourceIdentifierPairs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas"> 
    <SourceIdentifierPair> 
    <Source>ABCPN</Source> 
    <Identifier>123456789</Identifier> 
    </SourceIdentifierPair> 
    <SourceIdentifierPair> 
    <Source>ABCMR</Source> 
    <Identifier>00000</Identifier> 
    </SourceIdentifierPair> 
    <SourceIdentifierPair> 
    <Source>PRIM</Source> 
    <Identifier>00112233</Identifier> 
    </SourceIdentifierPair> 
</SourceIdentifierPairs> 

当源是ABCPN我需要拉Identifier

回答

3

你要找的XPath表达式是

//SourceIdentifierPair[Source='ABCPN']/Identifier 

确保注册的默认命名空间。

示例代码:

declare @x xml = '<SourceIdentifierPairs xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas"> 
    <SourceIdentifierPair> 
    <Source>ABCPN</Source> 
    <Identifier>123456789</Identifier> 
    </SourceIdentifierPair> 
    <SourceIdentifierPair> 
    <Source>ABCMR</Source> 
    <Identifier>00000</Identifier> 
    </SourceIdentifierPair> 
    <SourceIdentifierPair> 
    <Source>PRIM</Source> 
    <Identifier>00112233</Identifier> 
    </SourceIdentifierPair> 
</SourceIdentifierPairs>' 

--xpath as above, with default namespace specified 
;with xmlnamespaces ('http://schemas' as ns1, default 'http://schemas') 
select @x.value('(//SourceIdentifierPair[Source=''ABCPN'']/Identifier)[1]', 'nvarchar(32)') IdentifierABCPN 

--more complex version of the above code (may be useful should you have more complex requirements in future) 
;with xmlnamespaces ('http://schemas' as ns1) 
select @x.value('(/ns1:SourceIdentifierPairs/ns1:SourceIdentifierPair[./ns1:Source/text()[.=''ABCPN'']]/ns1:Identifier/text())[1]', 'nvarchar(32)') IdentifierABCPN 
+0

所以我理解这一点,但与每一个消息的XML变化。这些记录是每天发布的,我需要拉ABCPN并报告。 –

相关问题