Я пытаюсь проанализировать массив узлов XML, который представляет собой столбец nvarchar (max), преобразованный в XML, и я искал с помощью google и искал stackoverflow, но я не нашел никаких примеров, которые может помочь мне в этом.
У меня есть значение XML, сохраненное как nvarchar (max) в следующем формате:
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfCmnStatusRuleOverride xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cmnStatusRuleOverride xsi:type="cmnCoveredByOverride">
<Start>2020-05-28T17:00:00</Start>
<End>2020-05-29T07:00:00</End>
<SuspendExpiration>0001-01-01T00:00:00</SuspendExpiration>
<subID>103</subID>
<listID>4016</listID>
<Description>Jane Doe</Description>
</cmnStatusRuleOverride>
<cmnStatusRuleOverride xsi:type="cmnCoveredByOverride">
<Start>2020-05-26T17:00:00</Start>
<End>2020-05-28T07:00:00</End>
<SuspendExpiration>0001-01-01T00:00:00</SuspendExpiration>
<subID>103</subID>
<listID>4014</listID>
<Description>Joe Blow</Description>
</cmnStatusRuleOverride>
<cmnStatusRuleOverride xsi:type="cmnCoveredByOverride">
<Start>2020-05-25T17:00:00</Start>
<End>2020-05-26T07:00:00</End>
<SuspendExpiration>0001-01-01T00:00:00</SuspendExpiration>
<subID>103</subID>
<listID>4016</listID>
<Description>Jane Doe</Description>
</cmnStatusRuleOverride>
</ArrayOfCmnStatusRuleOverride>
Я использую следующее SQL для анализа содержимого, что близко к тому, что мне нужно, но перекрестные применения вызывают у меня проблемы
declare @Status xml, @Override nvarchar(100),@ORStart nvarchar(50), @OREnd nvarchar(50)
set @Status =
(select b.Overrides from Database.dbo.Descriptions as a
inner join Database.dbo.Listings as b on a.listID = b.listId
inner join Database.dbo.Clients as c on b.subId = c.subId and cast(c.ClientNumber as nvarchar) = '2195956693'
--cross apply @Status.nodes('/ArrayOfCmnStatusRuleOverride/cmnStatusRuleOverride/Description') as T(Loc)
where a.Description = 'Jack Sprat')
select T.OVR.query('.') 'Override'--, T1.STT.query('.') 'Start'--, T2.ENND.query('.') 'End'
from Database.dbo.Descriptions as a
inner join Database.dbo.Listings as b on a.listID = b.listId
inner join Database.dbo.Clients as c on b.subId = c.subId and cast(c.ClientNumber as nvarchar) = '9876543210'
cross apply @Status.nodes('/ArrayOfCmnStatusRuleOverride/cmnStatusRuleOverride/Description') as T(OVR)
--cross apply T.OVR.nodes('/ArrayOfCmnStatusRuleOverride/cmnStatusRuleOverride/Start') as T1(STT)
--cross apply T.OVR.nodes('/ArrayOfCmnStatusRuleOverride/cmnStatusRuleOverride/End') as T2(ENND)
where a.Description = 'Jack Sprat'
Со вторым и третьим xml запросами, закомментированными, я получаю 3 результата, так как я ожидал.
- Джейн Доу
- Джо Блоу
- Джейн Доу
Если я раскомментирую второй запрос, я получу 9 приводит к следующим результатам
Override Start
- Jane Doe 2020-05-28T17: 00: 00
- Jane Doe 2020-05-26T17: 00: 00
- Jane Доу 2020-05-25T17: 00: 00
- Джо Блоу 2020-05-28T17: 00: 00
- Джо Блоу 2020-05-26T17: 00: 00
- Джо Блоу 2020-05-25T17: 00: 00 * 10 33 *
- Джейн Доу 2020-05-28T17: 00: 00
- Джейн Доу 2020-05-26T17: 00: 00
- Джейн Доу 2020-05-25T17: 00: 00
И, конечно, если я раскомментирую третий запрос, у меня будет 27 строк. Какие-нибудь советы о том, что я делаю неправильно? Я работал с этим со вчерашнего утра, пытаясь понять это, и так близко, но так далеко.