Sdílet prostřednictvím


Primární výrazy (XQuery)

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
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

Ř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 &gt; 50000 and &lt; 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.

Viz také

KONSTRUKCE XML (XQuery)