XQuery İşletmenleri karşı xml veri türü
XQuery aşağıdaki işleçleri destekler:
Sayısal işleç (+, -, *, div, mod)
Değer karşılaştırması (eq, ne, lt, gt, le, ge) işleçleri
Genel karşılaştırma işleçleri (=,! =, <, >, <= >=)
Bu işleçleri hakkında daha fazla bilgi için bkz.Karşılaştırma ifadeleri (XQuery)
Örnekler
A.Genel işleçleri kullanma
Sorgu dizileri de dizileri karşılaştırmak için geçerli genel işleçler kullanımını göstermektedir. Sorgu için her müşterinin telefon numaraları bir dizi alır AdditionalContactInfo sütununda kişi tablosu. Bu dizi daha sonra iki telefon numaraları ("111-111-1111", "222-2222") sırası ile karşılaştırılır.
Sorgu kullanır = karşılaştırma işleci. Her düğümü sağ tarafında sıradaki = işleci sol tarafında sıradaki her düğüm ile karşılaştırılır. Eşleşen düğümler düğüm karşılaştırma ise gerçek. Onun ardından bir int'e dönüştürülür ve 1 ile karşılaştırıldığında ve sorgu, müşteri kimliği döndürür.
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)
SELECT ContactID
FROM Person.Contact
WHERE AdditionalContactInfo.value('
//ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =
("111-111-1111", "222-2222")',
'bit')= cast(1 as bit)
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)
SELECT ContactID
FROM Person.Contact
WHERE AdditionalContactInfo.value('
//ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =
("111-111-1111", "222-2222")',
'bit')= cast(1 as bit)
Önceki sorgu nasıl çalıştığını gözlemlemek için başka bir yol: dan alınan her telefon telefon numarası değeri AdditionalContactInfo sütun iki telefon numaraları kümesi ile karşılaştırılır. Değer kümesinde ise müşteri sonucu döndürülür.
B.Bir sayısal işleci kullanma
+ İşleci bu sorgu değeri operatörü, çünkü tek bir öğeye uygulanır. Örneğin, 1 değeri sorgu tarafından döndürülen bir lot boyutu eklenir:
SELECT ProductModelID, Instructions.query('
declare namespace
AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $i in (/AWMI:root/AWMI:Location)[1]
return
<Location LocationID="{ ($i/@LocationID) }"
LotSize = "{ number($i/@LotSize) }"
LotSize2 = "{ number($i/@LotSize) + 1 }"
LotSize3 = "{ number($i/@LotSize) + 2 }" >
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7
SELECT ProductModelID, Instructions.query('
declare namespace
AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $i in (/AWMI:root/AWMI:Location)[1]
return
<Location LocationID="{ ($i/@LocationID) }"
LotSize = "{ number($i/@LotSize) }"
LotSize2 = "{ number($i/@LotSize) + 1 }"
LotSize3 = "{ number($i/@LotSize) + 2 }" >
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7
C.Bir değer işleci kullanma
Aşağıdaki sorgu alır <Picture> öğeleri nerede resim boyutunu "küçük" bir ürün modeli için:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]
return
$P
') as Result
FROM Production.ProductModel
where ProductModelID=19
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]
return
$P
') as Result
FROM Production.ProductModel
where ProductModelID=19
Çünkü her iki işlenenleri eq operatör atomik değerleri, sorguda değer işleci kullanılır. Genel karşılaştırma işlecini kullanarak aynı sorgu yazabilirsiniz ( = ).
Ayrıca bkz.
Başvuru
Xml veri türü karşı XQuery işlevleri
Kavramlar
DEL - Implementing XML in SQL Server