2010-12-02 18 views
2

Ich habe das folgende einfache XML-Fragment unten gezeigt. Wie würde das T-SQL aussehen, wenn ich nur das Attribut 'EntityFriendlyName' extrahieren möchte?Wie extrahiere ich ein Element aus einer XML-Datei?

<SimpleRuleValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <EntityId>0</EntityId> 
    <EntityFriendlyName>ALine</EntityFriendlyName> 
</SimpleRuleValue> 

Antwort

3

Es wäre so etwas wie diese:

SELECT CAST(X.SomeXML AS XML).value('(SimpleRuleValue/EntityFriendlyName)[1]','nvarchar(1000)') AS EntityFriendlyName 
FROM XmlSource X 

Edit: A little more information.

+2

Unter der Annahme, dass die Spalte 'X' bereits vom Typ XML, könnten Sie vereinfachen zu 'SELECT X.value (.....)' –

+0

Korrekte marc_s, das war actua lly eine generische Lösung für ein ähnliches Problem, dem ich einmal gegenüberstand (der Datentyp war in diesem Fall varchar, glaube ich). – CodeMonkey1313

+0

Funktioniert gut! Vielen Dank. –

0

Hier ist eine Art und Weise:

declare @x xml 

set @x = '<SimpleRuleValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
       <EntityId>0</EntityId> 
       <EntityFriendlyName>ALine</EntityFriendlyName> 
      </SimpleRuleValue>' 

select @x.query('data(SimpleRuleValue/EntityFriendlyName)') 
+0

Verwendung der '//' Xpath-Operator ist in der Regel sehr ineffizient .... –

+1

@marc_s: Danke für den Tipp. Bearbeitete die Antwort. –

Verwandte Themen