2016-04-28 12 views
2

Für die Verwendung in einer SQL-Abfrage muss ich den Wert eines bestimmten XML-Elements abrufen. Das XML-Element wird durch sein Attribut angegeben.SQL Server: Wie erhält man den Wert eines XML-Elements, das ein Attribut angibt?

sieht Meine XML-Elemente wie folgt aus:

<translations> 
    <value lang="en-US">example</value> 
    <value lang="de-DE">Beispiel</value> 
</translations> 

und der Wert ich suche wäre „Beispiel“, wenn ich lang angeben „en-US“ zu sein.

Ich habe einen Weg gefunden, um diesen Wert zu erhalten, indem Sie die query() - Funktion und danach die value() -Funktion verwenden.

Diese SELECT-Anweisung gibt den Wert "example" zurück, nach dem ich mithilfe der Funktionen query() und value() suche. Aber gibt es auch einen - bequemeren - Weg, nur value() oder query() zu verwenden?

Vielen Dank im Voraus!

Antwort

1

Sicher gibt es ...

Sie können auch die Erklärung verkürzen:

declare @X xml= 
'<translations> 
    <value lang="en-US">example</value> 
    <value lang="de-DE">Beispiel</value> 
</translations>'; 

select @X.value('(/translations/value[@lang="en-US"])[1]','varchar(max)'); 

Der Punkt ist, dass Sie ein Singletons Ergebnis benötigen, wenn Sie .value() verwenden. Sie erreichen dies, indem Sie die XPath in Paranthesis setzen und das erste Element zwingen (in diesem Fall ist es das einzige Element).

Btw: Wenn Sie diese (und früher oder später müssen Sie dies ...), können Sie die „en-US“ als Parameter in Ihre Abfrage so:

declare @prm VARCHAR(10)='en_US'; 
select @X.value('(/translations/value[@lang=sql:variable("@prm")])[1]','varchar(max)'); 

Sie können erreichen Sie die ähnliche, aber mit einem Wert der tatsächlichen Abfrage mit sql:column().

+0

Vielen Dank! Das ist eine große Verbesserung für mich! – bert

Verwandte Themen