Мне нужно обработать данные из xml по дате операции, моделируя день за днем, в течение 4 месяцев обрабатывать в базе данных файл XML, который выглядит так:
<Operaciones_por_Dia>
<OperacionDia fecha="2020-01-30">
<PagoRecibo TipoRecibo="5" NumFinca="9782331"/>
<PagoRecibo TipoRecibo="5" NumFinca="6696849"/>
<TransConsumo id="1" LecturaM3="325" descripcion="Cobro Mensual" NumFinca="3336538"/>
<TransConsumo id="3" LecturaM3="40" descripcion="Lectura errónea" NumFinca="2425954"/>
</OperacionDia>
<OperacionDia fecha="2020-04-08">
<PagoRecibo TipoRecibo="7" NumFinca="1423800"/>
<PagoRecibo TipoRecibo="7" NumFinca="1393022"/>
<TransConsumo id="2" LecturaM3="22" descripcion="Reclamo de cliente" NumFinca="2101885"/>
</OperacionDia>
</Operaciones_por_Dia>
Когда я подготавливаю данные, я сохраняю все даты из XML в таблицу переменных, а затем выполняю итерацию от минимальной даты до максимальной даты (@FechaOperacion сохранила эту дату), затем мне нужно обработать данные узла, где дата совпадает с датой узла xml.
Я пытаюсь это сделать, но @ Documento XML .value ('(/ Operaciones_por_Dia / OperacionDia / @ fecha) [1]', 'DATE' ) не совпадают, правильные данные, которые мне нужно сравнить, - это Fecha с @FechaOperacion, но я не знаю, как мне получить это значение с помощью Xquery.
INSERT @PagosHoy (NumFinca, TipoRecibo, Fecha)
select ph.value('@NumFinca', 'INT')
, ph.value('@TipoRecibo', 'INT')
, ph.value('../@fecha', 'DATE')
from @DocumentoXML.nodes('/Operaciones_por_Dia/OperacionDia/PagoRecibo') AS t(ph)
where @DocumentoXML.value('(/Operaciones_por_Dia/OperacionDia/@fecha)[1]', 'DATE') = @FechaOperacion
С помощью следующего кода это работают хорошо, но я хочу знать, как это сделать, как и по-другому.
INSERT INTO @PagosHoy(NumFinca,TipoRecibo,Fecha)
SELECT [NumFinca],[TipoRecibo],[fechaDeIngreso]
FROM OPENXML (@hdoc, 'Operaciones_por_Dia/OperacionDia/PagoRecibo',1)
WITH ( [NumFinca] VARCHAR(30) '@NumFinca',
[TipoRecibo] INT '@TipoRecibo',
[fechaDeIngreso] VARCHAR(100) '../@fecha')
WHERE [fechaDeIngreso] = @FechaOperacion
EXEC spProcesaPagos @PagosHoy