Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Primární výrazy XQuery zahrnují literály, odkazy na proměnné, výrazy kontextových položek, konstruktory a volání funkcí.
Literály
Literály XQuery můžou být číselné nebo řetězcové literály. Řetězcový literál může obsahovat předdefinované odkazy na entity a odkaz na entitu je posloupnost znaků. Sekvence začíná ampersandem, který představuje jeden znak, který by jinak mohl mít syntaktický význam. Následují předdefinované odkazy na entity pro XQuery.
| Referenční dokumentace k entitě | Reprezentuje |
|---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
Řetězcový literál může obsahovat také odkaz na znak, odkaz ve stylu XML na znak Unicode, který je identifikován desetinným nebo šestnáctkovým kódovým bodem. Například symbol euro může být reprezentován odkazem na znak "€".
Poznámka
SQL Server jako základ pro analýzu používá xml verze 1.0.
Příklady
Následující příklady ilustrují použití literálů a také odkazů na entity a znaky.
Tento kód vrátí chybu, protože <' a '> znaky mají zvláštní význam.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')
GO
Pokud místo toho použijete odkaz na entitu, funguje dotaz.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')
GO
Následující příklad znázorňuje použití znakového odkazu k reprezentaci symbolu Euro.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <a>€12.50</a>')
Toto je výsledek.
<a>€12.50</a>
V následujícím příkladu je dotaz oddělený apostrofy. Apostrof v řetězcové hodnotě je proto reprezentován dvěma sousedními apostrofy.
DECLARE @var XML
SET @var = ''
SELECT @var.query('<a>I don''t know</a>')
Go
Toto je výsledek.
<a>I don't know</a>
Integrované logické funkce, true() a false(), lze použít k reprezentaci logických hodnot, jak je znázorněno v následujícím příkladu.
DECLARE @var XML
SET @var = ''
SELECT @var.query('<a>{true()}</a>')
GO
Konstruktor přímých elementů určuje výraz ve složených závorkách. Tato hodnota je nahrazena jeho hodnotou ve výsledném XML.
Toto je výsledek.
<a>true</a>
Odkazy na proměnné
Odkaz na proměnnou v XQuery je QName před znakem $. Tato implementace podporuje pouze nefixované odkazy na proměnné. Například následující dotaz definuje proměnnou $i ve výrazu FLWOR.
DECLARE @var XML
SET @var = '<root>1</root>'
SELECT @var.query('
for $i in /root return data($i)')
GO
Následující dotaz nebude fungovat, protože do názvu proměnné se přidá předpona oboru názvů.
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
Funkci rozšíření sql:variable() můžete použít k odkazování na proměnné SQL, jak je znázorněno v následujícím dotazu.
DECLARE @price money
SET @price=2500
DECLARE @x xml
SET @x = ''
SELECT @x.query('<value>{sql:variable("@price") }</value>')
Toto je výsledek.
<value>2500</value>
Omezení implementace
Toto jsou omezení implementace:
Proměnné s předponami oboru názvů nejsou podporovány.
Import modulu se nepodporuje.
Deklarace externích proměnných nejsou podporovány. Řešením je použít funkci sql:variable().
Výrazy kontextové položky
Kontextová položka je aktuálně zpracována v kontextu výrazu cesty. Inicializuje se v instanci datového typu XML not-NULL s uzlem dokumentu. Lze ho také změnit pomocí metody nodes() v kontextu výrazů XPath nebo predikátů [].
Kontextová položka je vrácena výrazem, který obsahuje tečku (.). Například následující dotaz vyhodnocuje každý prvek <a> přítomnost atributu attr. Pokud je atribut k dispozici, vrátí se prvek. Všimněte si, že podmínka v predikátu určuje, že kontextový uzel je určen jednou tečkou.
DECLARE @var XML
SET @var = '<ROOT>
<a>1</a>
<a attr="1">2</a>
</ROOT>'
SELECT @var.query('/ROOT[1]/a[./@attr]')
Toto je výsledek.
<a attr="1">2</a>
Volání funkcí
Můžete volat předdefinované funkce XQuery a funkce SQL Server sql:variable() a sql:column(). Seznam implementovaných funkcí naleznete v tématu XQuery Functions proti datovému typu XML.
Omezení implementace
Toto jsou omezení implementace:
Deklarace funkce v prologu XQuery není podporována.
Import funkce není podporován.