从 SQL 中的 XML 数据中提取属性详细信息

Posted

技术标签:

【中文标题】从 SQL 中的 XML 数据中提取属性详细信息【英文标题】:Extract attribute details from XML data in SQL 【发布时间】:2020-01-28 16:27:28 【问题描述】:

我在 SQL 中有一个列 (attributes),其中包含 XML 数据。您能否建议如何从该 XML 数据中提取 错误 详细信息

我尝试了下面的查询它没有工作。

SELECT top 10 identity_name,
CAST (tr.attributes as xml).value('(Attributes/Map/entry/value/accountrequest/ProvisioningResult/Errors[@key="Message"])[1]/@value','nvarchar(200)') as Message
From [identityiq].[identityiq].[spt_provisioning_transaction] as tr 
where id = '8aae1d866d49a4b2016d57852fc3503b'

XML 数据在下面

<Attributes>   <Map>     <entry key="accessRequestId" value="0000086661"/>     <entry key="request">       <value>         <AccountRequest application="Active Directory" nativeIdentity="123" op="Modify">           <Attributes>             <Map>               <entry key="provisioningTransactionId" value="8aae1d866cace49c016cf7e26a7f4a8a"/>             </Map>           </Attributes>           <AttributeRequest name="memberOf" op="Remove" value="Testgroup"/>           <ProvisioningResult>             <Errors>               <Message key="Errors returned from IQService. &quot;Failed to update attributes for identity 123. Failed to connect to the server for Testgroup&quot;" type="Error"/>             </Errors>           </ProvisioningResult>         </AccountRequest>       </value>     </entry>   </Map> </Attributes> 

【问题讨论】:

是区分大小写的。试试“属性” 【参考方案1】:

注意区分大小写..

declare @x xml = N'
<Attributes>
  <Map>
    <entry key="accessRequestId" value="0000086661" />
    <entry key="request">
      <value>
        <AccountRequest application="Active Directory" nativeIdentity="123" op="Modify">
          <Attributes>
            <Map>
              <entry key="provisioningTransactionId" value="8aae1d866cace49c016cf7e26a7f4a8a" />
            </Map>
          </Attributes>
          <AttributeRequest name="memberOf" op="Remove" value="Testgroup" />
          <ProvisioningResult>
            <Errors>
              <Message key="Errors returned from IQService. &quot;Failed to update attributes for identity 123. Failed to connect to the server for Testgroup&quot;" type="Error" />
            </Errors>
          </ProvisioningResult>
        </AccountRequest>
      </value>
    </entry>
  </Map>
</Attributes>
';

    select @x.value('(Attributes/Map/entry/value/AccountRequest/ProvisioningResult/Errors/Message[@type="Error"])[1]/@key','nvarchar(200)') as Message;

【讨论】:

以上是关于从 SQL 中的 XML 数据中提取属性详细信息的主要内容,如果未能解决你的问题,请参考以下文章

从具有 Oracle db 中的属性的 XML 中提取 NCLOB 中的 XML 数据

使用 Oracle 数据库中的 SQL 从 XML Clob 中提取数据

从 SQL Server 中的 XML 数据类型字段中提取数据

在 SQL 中提取 XML 数据 - 过多的交叉应用语句

如何从以 BLOB 类型存储在列中的 XML 中提取数据(通过 SQL 查询)

使用 PL SQL 提取基于属性的 XML