Comment interroger une colonne xml dans tsql
J'ai une table, T1, avec une colonne XML, EventXML, sur SQL Server 2008. Je veux interroger toutes les lignes où certains nœuds contiennent une valeur particulière. Mieux, je voudrais récupérer la valeur dans un nœud différent. Le tableau T1:
T1:
EventID, int
EventTime, datetime
EventXML, XML
Voici un exemple de hiérarchie XML:
<Event>
<Indicator>
<Name>GDP</Name>
</Indicator>
<Announcement>
<Value>2.0</Value>
<Date>2012-01-01</Date>
</Announcement>
</Event>
- Comment trouver toutes les lignes liées à L'indicateur "PIB";
- Comment obtenir toutes les valeurs de L'indicateur "PIB";
31
demandé sur
marc_s
2012-11-02 17:13:24
2 réponses
Et ça?
SELECT
EventID, EventTime,
AnnouncementValue = t1.EventXML.value('(/Event/Announcement/Value)[1]', 'decimal(10,2)'),
AnnouncementDate = t1.EventXML.value('(/Event/Announcement/Date)[1]', 'date')
FROM
dbo.T1
WHERE
t1.EventXML.exist('/Event/Indicator/Name[text() = "GDP"]') = 1
, Il va trouver toutes les lignes où le /Event/Indicator/Name
est égal à GDP
, puis il affiche le <Announcement>/<Value>
et <Announcement>/<Date>
pour ces lignes.
62
répondu
marc_s
2012-11-02 13:21:21
DECLARE @t XML = '
<Event>
<Indicator>
<Name>GDP</Name>
</Indicator>
<Announcement>
<Value>2.0</Value>
<Date>2012-01-01</Date>
</Announcement>
</Event>
<Event>
<Indicator>
<Name>Other</Name>
</Indicator>
<Announcement>
<Value>3.0</Value>
<Date>2012-01-01</Date>
</Announcement>
</Event>
'
SELECT node.value('.', 'NUMERIC(20, 2)')
FROM @t.nodes('/Event[Indicator/Name/node()=''GDP'']/Announcement/Value') t(node)
9
répondu
Quassnoi
2012-11-02 13:22:45