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 |
---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
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 > 50000 and < 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.