Udostępnij za pośrednictwem


Wyrażenia podstawowe (XQuery)

Dotyczy:programu SQL Server

Wyrażenia podstawowe XQuery obejmują literały, odwołania do zmiennych, wyrażenia elementów kontekstu, konstruktory i wywołania funkcji.

Literały

Literały XQuery mogą być literałami liczbowymi lub ciągami. Literał ciągu może zawierać wstępnie zdefiniowane odwołania do jednostki, a odwołanie do jednostki jest sekwencją znaków. Sekwencja rozpoczyna się od znaku ampersand, który reprezentuje pojedynczy znak, który w przeciwnym razie może mieć znaczenie składniowe. Poniżej przedstawiono wstępnie zdefiniowane odwołania do jednostek dla zapytania XQuery.

Odwołanie do jednostki Reprezentuje
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

Literał ciągu może również zawierać odwołanie do znaku, odwołanie w stylu XML do znaku Unicode, który jest identyfikowany przez jego punkt kodu dziesiętnego lub szesnastkowy. Na przykład symbol Euro może być reprezentowany przez odwołanie do znaku "€".

Nuta

Program SQL Server używa kodu XML w wersji 1.0 jako podstawy do analizowania.

Przykłady

W poniższych przykładach pokazano użycie literałów, a także odwołań do jednostek i znaków.

Ten kod zwraca błąd, ponieważ znaki <' i '> mają specjalne znaczenie.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')  
GO  

Jeśli zamiast tego używasz odwołania do jednostki, zapytanie działa.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary &gt; 50000 and &lt; 100000</SalaryRange>')  
GO  

W poniższym przykładzie pokazano użycie odwołania do znaku reprezentującego symbol Euro.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <a>€12.50</a>')  

Jest to wynik.

<a>€12.50</a>

W poniższym przykładzie zapytanie jest rozdzielane apostrofami. W związku z tym apostrof w wartości ciągu jest reprezentowany przez dwa sąsiadujące apostrofy.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>I don''t know</a>')  
Go  

Jest to wynik.

<a>I don't know</a>

Wbudowane funkcje logiczne, true() i false(), mogą służyć do reprezentowania wartości logicznych, jak pokazano w poniższym przykładzie.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>{true()}</a>')  
GO  

Konstruktor elementu bezpośredniego określa wyrażenie w nawiasach klamrowych. Jest to zastępowane przez jego wartość w wynikowym pliku XML.

Jest to wynik.

<a>true</a>

Odwołania do zmiennych

Odwołanie do zmiennej w trybie XQuery jest nazwą QName poprzedzoną znakiem $. Ta implementacja obsługuje tylko nieprefiksowane odwołania do zmiennych. Na przykład następujące zapytanie definiuje zmienną $i w wyrażeniu FLWOR.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
 for $i in /root return data($i)')  
GO  

Następujące zapytanie nie będzie działać, ponieważ do nazwy zmiennej jest dodawany prefiks przestrzeni nazw.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
DECLARE namespace x="https://X";  
for $x:i in /root return data($x:i)')  
GO  

Możesz użyć funkcji rozszerzenia sql:variable(), aby odwołać się do zmiennych SQL, jak pokazano w poniższym zapytaniu.

DECLARE @price money  
SET @price=2500  
DECLARE @x xml  
SET @x = ''  
SELECT @x.query('<value>{sql:variable("@price") }</value>')  

Jest to wynik.

<value>2500</value>

Ograniczenia implementacji

Są to ograniczenia implementacji:

  • Zmienne z prefiksami przestrzeni nazw nie są obsługiwane.

  • Importowanie modułów nie jest obsługiwane.

  • Deklaracje zmiennych zewnętrznych nie są obsługiwane. Rozwiązaniem tego problemu jest użycie funkcji sql:variable().

Wyrażenia elementu kontekstu

Element kontekstu jest obecnie przetwarzany w kontekście wyrażenia ścieżki. Jest inicjowany w wystąpieniu typu danych XML o wartości innej niż NULL z węzłem dokumentu. Można ją również zmienić za pomocą metody nodes() w kontekście wyrażeń XPath lub predykatów [].

Element kontekstu jest zwracany przez wyrażenie zawierające kropkę (.). Na przykład następujące zapytanie ocenia każdy element <a> pod kątem obecności atrybutu attr. Jeśli atrybut jest obecny, zwracany jest element. Należy pamiętać, że warunek w predykacie określa, że węzeł kontekstu jest określony przez pojedynczy okres.

DECLARE @var XML  
SET @var = '<ROOT>  
<a>1</a>  
<a attr="1">2</a>  
</ROOT>'  
SELECT @var.query('/ROOT[1]/a[./@attr]')  

Jest to wynik.

<a attr="1">2</a>

Wywołania funkcji

Wbudowane funkcje XQuery i SQL Server sql:variable() i sql:column() można wywoływać wbudowane funkcje XQuery. Aby uzyskać listę zaimplementowanych funkcji, zobacz funkcje XQuery względem typu danych XML.

Ograniczenia implementacji

Są to ograniczenia implementacji:

  • Deklaracja funkcji w prologu XQuery nie jest obsługiwana.

  • Importowanie funkcji nie jest obsługiwane.

Zobacz też

konstrukcji XML (XQuery)