2016-06-13 9 views
0

Ich habe einen XML-Shop in SQL Server mit dem folgenden Aufbau:Auswählen von XML-Elemente mit where-Klausel SQL Server

<ecHeaderData> 
    <FirstVersionSource>System1</FirstVersionSource> 
    <DMSEntryUserID>jsmith</DMSEntryUserID> 
</ecHeaderData> 

Ich möchte alle Zeilen zurückgeben, wo DMSEntryUserID nicht leer ist. Ich möchte sowohl die FirstVersionSource als auch die DMSEntryuserID in der Abfrage auswählen.

Etwas wie folgt aus:

select deal_jacket_xml('/ecHeader/FirstVersionSource') as FirstVersionSource, 
deal_jacket_xml('/ecHeader/DMSEntryUserID') as DMSEntryUserID 
from deal_jacket_xml 
where deal_jacket_xml('NotBlank(/ecHeader/DMSEntryUserID'))=1 
order by [deal_jacket_xml_id] desc 
+0

Ihre Frage macht wenig Sinn. Lesen Sie [xml Datentyp Methoden] (https://msdn.microsoft.com/en-us/library/ms190798.aspx) zuerst –

Antwort

0

Hier ist, was ich kam mit. Der Schlüssel ist die Klammer und die Indexspezifikation von [1]:

select distinct deal_jacket_xml.value('(/eContractingData/ecHeaderData/FirstVersionSource)[1]', 'nvarchar(max)') as FirstVersionSource 
from deal_jacket_xml 
where deal_jacket_xml.value('(/eContractingData/ecHeaderData/FirstVersionSource)[1]', 'nvarchar(max)') is not null 
AND deal_jacket_xml.value('(/eContractingData/ecHeaderData/DMSEntryUserID)[1]', 'nvarchar(max)') is not null 
+0

Dies könnte besser (in der Leistung) getan werden ... Ist Ihr XML-Schnipsel die ganze Struktur und Sie haben dies in vielen Zeilen Ihrer Tabelle wiederholt oder haben Sie XML mit vielen wiederholten Knoten und müssen Sie einige davon heraussuchen? – Shnugo

+0

Die XML-Struktur ist riesig. Der Ausschnitt ist nur ein kleiner Teil. Es gibt eine riesige XML-Struktur pro Zeile. –

Verwandte Themen