2012-04-09 8 views
3

Ich bin neu in xquery in SQL Server.Was ist die Bedeutung von [1] in Xquery

Ich habe oft auf xquery Ausdrücke mit [1] mit Attributen gestoßen.

Kann jemand bitte erklären, was es bedeutet? Hier

ist ein Beispiel

declare @aa xml 
set @aa='<data> 
    <row> 
    <Value>1</Value> 
    <Text>Masters</Text> 
    </row> 
    <row> 
    <Value>2</Value> 
    <Text>Transactions</Text> 
    </row> 
    <row> 
    <Value>3</Value> 
    <Text>Misch. Reports</Text> 
    </row> 
</data>' 


select a.f.value('Value[1]','varchar(50)'), -- why [1] here ? 
    a.f.value('Text[1]','varchar(50)')   -- and here too.. 
from @aa.nodes('/data/row') as a(f) 

Dank n Grüße

+0

Gut Q - Ich habe immer angenommen es ein Index (erstes Auftreten des 'Value' Knoten) war, aber ich bin nicht sicher, – JNK

+0

sicher es sonst kein Index ist es scheint, mehrere Zeilen – Deb

+0

Nun, die Antwort zurückgeben würde nicht zu anders angeben :) Denken Sie daran, dies ist eine Hierarchie, also ich denke, es bedeutet der erste Wert Knoten auf dieser Ebene des Baumes. Sie mehrere Zeilen, so dass Sie mehrere Werte erhalten. – JNK

Antwort

3

In diesem Fall Sie sagen Sie das erste Value Element für die aktuelle /data/row und das erste Text Element für das gleiche wollen. Wenn Sie eine [2] dort setzen, wird es die zweite bedeuten. Indem Sie eine [1] setzen, auch wenn Sie wissen, dass es nur eine Zeile geben wird, können Sie sich sicher fühlen, dass nur ein Element in die value-Funktion eintritt.

+0

Ist das alles? kein anderer Grund? – Deb

+0

Was meinst du? Ja, das ist alles. Es ist, weil Sie '' und wollen haben könnten das dritte 'Data' Element in der Abfrage zu erhalten. So erlaubt es die '[#]' - Syntax. –

+0

Ich bin fast überzeugt aber warte immer noch wenn jemand mehr Infos hat. – Deb

8

In XPath die [expression] Syntax bezeichnet eine predicate auf dem Pfad Speicherort. [1] ist die abbreviated syntax für [position()=1], was "das erste Element" bedeutet. In SQL Server-Verwendung von XPath ist die [1] (oder jedes andere Prädikat, das deterministisch zu höchstens einem Element filtert) erforderlich, da es den XPath-Ausdruck von einem, der eine beliebige Anzahl von Elementen zurückgibt, zu einem transformiert, der deterministisch 0 oder 1 Elemente zurückgibt in einen skalaren Ausdruck, der .value() erfordert:

Die XQuery muss höchstens einen Wert zurückgeben.

+0

Sehr gut gemacht Antwort. Danke auch für die Links. –

+0

Ja, das war wirklich informativ. Danke Remus .. – Deb