Birincil İfadeler (XQuery)

Şunlar için geçerlidir: SQL Server

XQuery birincil ifadeleri literaller, değişken referansları, bağlam öğesi ifadeleri, yapıcılar ve fonksiyon çağrılarını içerir.

Literals

XQuery literalallar sayısal veya dizi literalleri olabilir. Bir dize literali önceden tanımlanmış varlık referanslarını içerebilir ve varlık referansı ise bir karakter dizisidir. Dizi, aksi takdirde sözdizimsel anlamı olabilecek tek bir karakteri temsil eden bir ampersand ile başlar. Aşağıda XQuery için önceden tanımlanmış varlık referansları yer almaktadır.

Varlık referansı Temsil eder
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

Bir dize literali ayrıca, ondalık veya onaltılık kod noktasıyla tanımlanan bir karakter referansı, yani XML tarzı bir Unicode karakter referansı içerebilir. Örneğin, Euro sembolü "€" karakter referansıyla temsil edilebilir.

Note

SQL Server, ayrıştırma için XML sürüm 1.0'ı temel alır.

Examples

Aşağıdaki örnekler, kelime harimlerinin ve ayrıca varlık ile karakter referanslarının kullanımını göstermektedir.

Bu kod hata döndürür, çünkü <' ve '> karakterleri özel bir anlama sahiptir.

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

Bunun yerine bir varlık referansı kullanırsanız, sorgu çalışır.

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

Aşağıdaki örnek, Euro sembolünü temsil etmek için bir karakter referansının kullanımını göstermektedir.

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

Sonuç budur.

<a>€12.50</a>

Aşağıdaki örnekte, sorgu apostroflarla sınırlandırılmıştır. Bu nedenle, dizi değerindeki apostrof iki bitişik apostrof ile temsil edilir.

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

Sonuç budur.

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

Yerleşik Boolean fonksiyonları, true() ve false(), aşağıdaki örnekte gösterildiği gibi Boolean değerlerini temsil etmek için kullanılabilir.

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

Doğrudan eleman oluşturucu, kıvırcıl desteklerde bir ifade belirtir. Bu, ortaya çıkan XML'deki değeriyle değiştirilir.

Sonuç budur.

<a>true</a>

Değişken Referanslar

XQuery'deki değişken referansı, $ işaretinin önündeki bir QName'dir. Bu uygulama yalnızca öneksiz değişken referanslarını destekler. Örneğin, aşağıdaki sorgu FLWOR ifadesindeki değişkeni $i tanımlar.

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

Aşağıdaki sorgu çalışmaz çünkü değişken adına bir isim alanı öneki eklenmiştir.

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  

SQL değişkenlerine atıfta bulunmak için sql:variable() uzantı fonksiyonunu kullanabilirsiniz, aşağıdaki sorguda gösterildiği gibi.

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

Sonuç budur.

<value>2500</value>

Uygulama Sınırlamaları

Uygulama sınırlamaları şunlardır:

  • Isim alanı önekli değişkenler desteklenmez.

  • Modül içe aktarma desteklenmiyor.

  • Harici değişken bildirimleri desteklenmez. Bunun çözümü sql:variable() fonksiyonunu kullanmaktır.

Bağlam Öğe İfadeleri

Bağlam öğesi, şu anda bir yol ifadesi bağlamında işlenen öğedir. Belge düğümüyle birlikte NULL olmayan bir XML veri tipi örneğinde başlatılır. Ayrıca, XPath ifadeleri veya [] yüklemleri bağlamında nodes() yöntemiyle de değiştirilebilir.

Bağlam öğesi, bir nokta (.) içeren bir ifadeyle döner. Örneğin, aşağıdaki sorgu, her bir öğeyi <a> özniteliğin attrvarlığı açısından değerlendirir. Özellik varsa, öğe geri döner. Önlemdeki koşul, bağlam düğümünün tek bir nokta ile belirlendiğini belirtir.

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

Sonuç budur.

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

Fonksiyon Çağrıları

Yerleşik XQuery fonksiyonlarını ve SQL Server'ın sql:variable() ve sql:column() fonksiyonlarını çağırabilirsiniz. Uygulanan fonksiyonların listesi için bkz. XQuery Fonksiyonları xml Veri Tipine karşı.

Uygulama Sınırlamaları

Uygulama sınırlamaları şunlardır:

  • XQuery prologunda fonksiyon bildirmesi desteklenmemektedir.

  • Fonksiyon içe aktarma desteklenmiyor.