sql - 使用SQL过滤 XML

  显示原文与译文双语对照的内容
0 0

我正在处理BPM并提取了一个大的xml文件,现在我想用SQL过滤它。 我想过滤它,以便我只能用 101的"角色类型"提取contractrole子对象。 我的xml是一种形式:


<contract>
 <ContractRole>
 <ContractId>xxxgg</ContractId>
 <RoleType>104</RoleType>
 <LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
 </ContractRole>
 <ContractRole>
 <ContractId>xxxaa</ContractId>
 <RoleType>100</RoleType>
 <LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
 </ContractRole>
 <ContractRole>
 <ContractId>xxxdd</ContractId>
 <RoleType>101</RoleType>
 <LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate> 
 </ContractRole>
<contract>

如何将它的他角色类型的条目筛选为 101? 对于 SQL,我没有什么经验,但是我希望使用一个SELECT语句,其中RoleType是 101. 在直接调用数据库时,我可以很容易地做到这一点,但是这里我需要从XML中提取相同的信息。

随机示例在线建议了以下内容:


SELECT child.value('(LastUpdate/text())[1]', 'TIMESTAMP') AS [LastUpdateDate]
, child.value('(ContractId/text())[1]', 'BIGINT') AS [Id]
 FROM [Contract] AS T
CROSS APPLY [ImportData].nodes('/Contract/ContractRole[RoleType/text() =="101"]') AS ImportData(child)

请问有谁能帮我做这个过滤器。 在选择任何内容或者如何工作之前,我是否需要declaire的名称?

时间: 原作者:

0 0

假设这是 SqlServer,并且你在松散变量( 否则,需要交叉应用表格,但表单是相同的( 有一个查看这里的Xml列或者Xml文件。) 中拥有 Xml 一些说明:

  • 请注意,xml区分大小写,即 contractcontract 不相同
  • Xpath和xsl使用单个 = 进行相等性
  • BIGINTDATETIME 之类的日期类型看起来更适合于xml类型映射。
  • contract 结束标记错误。

SELECT node.value('(LastUpdateDate/text())[1]', 'DATETIME') AS [LastUpdateDate]
, node.value('(ContractId/text())[1]', 'VARCHAR(20)') AS [Id]
 FROM @x.nodes('/contract/ContractRole[RoleType/text() ="101"]') AS nodes(node);

我已经假定如下:


DECLARE @x XML = 
'<contract>
 <ContractRole>
 <ContractId>xxxgg</ContractId>
 <RoleType>104</RoleType>
 <LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
 </ContractRole>
 <ContractRole>
 <ContractId>xxxaa</ContractId>
 <RoleType>100</RoleType>
 <LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate>
 </ContractRole>
 <ContractRole>
 <ContractId>xxxdd</ContractId>
 <RoleType>101</RoleType>
 <LastUpdateDate>2014-04-01 12:34:12.84</LastUpdateDate> 
 </ContractRole>
</contract>';

返回


LastUpdateDate Id
----------------------- --------------------
2014-04-01 12:34:12.840 xxxdd

原作者:
...