我有一个包含交易数据的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
答案 0 :(得分:2)
使用[1]将XPath附加到XQuery中以获取第一个匹配项。
如果答案不够具体,您可能希望发布查询,数据和一些预期结果。