TSQL Xquery - 您可以选择重复节点的第一个实例吗?

时间:2014-05-22 10:32:21

标签: xml tsql xquery

我有一个包含交易数据的XML文档,一些交易可以有多个支柱,这意味着重复了XML结构。我的XQuery中有没有办法可以选择重复项的第一个实例?

感谢您的第一个回复,我已添加了参考代码......

declare @Trade_Ref nvarchar(12)

select  @Trade_Ref = 'OTC_0000001'

declare @input xml =    (
        select  FIXML_Data
        from    dbo.OTC_FIXML_Data
        where   TradeRef = @Trade_Ref
        )               
;WITH XMLNAMESPACES(DEFAULT 'http://www.fixprotocol.org/FIXML-4-4') 
update  dbo.OTC_FIXML_Data 
set TrdDt   = (select @input.value('(/FIXML/Batch/AllocInstrctn/@TrdDt)[1]', 'datetime'))               
    ,TxnTm  = (select @input.value('(/FIXML/Batch/AllocInstrctn/@TxnTm)[1]', 'datetime'))           ,Side   = (select @input.value('(/FIXML/Batch/AllocInstrctn/@Side)[1]', 'int'))         ,Qty    = (select @input.value('(/FIXML/Batch/AllocInstrctn/@Qty)[1]', 'int'))              ,TransTyp   = (select @input.value('(/FIXML/Batch/AllocInstrctn/@TransTyp)[1]', 'nvarchar(10)'))                
    ,ID2    = (select @input.value('(/FIXML/Batch/AllocInstrctn/@ID2)[1]', 'nvarchar(10)'))         ,ID = (select @input.value('(/FIXML/Batch/AllocInstrctn/Instrmt/@ID)[1]', 'nvarchar(20)'))          
    ,IndAllocID= (select @input.value('(/FIXML/Batch/AllocInstrctn/Alloc/@IndAllocID)[1]', 'nvarchar(100)')) 
where TradeRef = @Trade_Ref

1 个答案:

答案 0 :(得分:2)

使用[1]将XPath附加到XQuery中以获取第一个匹配项。

如果答案不够具体,您可能希望发布查询,数据和一些预期结果。