Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SQL Server, bir dizi öğe oluşturmak, filtrelemek ve birleştirmek için kullanılan XQuery operatörlerini destekler. Bir eşya atomik değer veya düğüm olabilir.
Dizileri Oluşturma
Virgül operatörünü kullanarak öğeleri tek bir diziye birleştiren bir dizi oluşturabilirsiniz.
Bir dizide tekrarlanan değerler bulunabilir. İç içe dizileri olan bir dizi içinde bir dizi birleştirilir. Örneğin, (1, 2, (3, 4, (5))) dizisi (1, 2, 3, 4, 5) olur. Bunlar dizileri oluşturma örnekleridir.
Örnek A
Aşağıdaki sorgu, beş atomik değerden oluşan bir diziyi döndürür:
declare @x xml
set @x=''
select @x.query('(1,2,3,4,5)')
go
-- result 1 2 3 4 5
Aşağıdaki sorgu iki düğümden oluşan bir dizi döndürür:
-- sequence of 2 nodes
declare @x xml
set @x=''
select @x.query('(<a/>, <b/>)')
go
-- result
<a />
<b />
Aşağıdaki sorgu hata döndürür, çünkü atomik değerler ve düğümler dizisi oluşturuyorsunuz. Bu heterojen bir dizidir ve desteklenmez.
declare @x xml
set @x=''
select @x.query('(1, 2, <a/>, <b/>)')
go
Örnek B
Aşağıdaki sorgu, farklı uzunluktaki dört diziyi tek bir dizide birleştirerek atomik değerler dizisini oluşturur.
declare @x xml
set @x=''
select @x.query('(1,2),10,(),(4, 5, 6)')
go
-- result = 1 2 10 4 5 6
Diziyi FLOWR ve ORDER BY kullanarak sıralayabilirsiniz:
declare @x xml
set @x=''
select @x.query('for $i in ((1,2),10,(),(4, 5, 6))
order by $i
return $i')
go
Dizide bulunan öğeleri fn:count() fonksiyonunu kullanarak sayabilirsiniz.
declare @x xml
set @x=''
select @x.query('count( (1,2,3,(),4) )')
go
-- result = 4
Örnek C
Aşağıdaki sorgu, Contact tablosunda xml tipinin AdditionalContactInfo sütununa karşı belirtilmiştir. Bu sütun, bir veya daha fazla ek telefon numarası, pager numarası ve adres gibi ek iletişim bilgilerini depolar. TelefonNumara<>, <çağırıcı> ve diğer düğümler belgenin herhangi bir yerinde görünebilir. Sorgu, bağlam düğümünün tüm <telefonNumber> çocuklarını ve ardından <pager> çocuklarını içeren bir dizi oluşturur. Dönüş ifadesinde virgül dizisi operatörünün kullanılmasına dikkat edin. ($a//act:telephoneNumber, $a//act:pager)
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS act,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS aci)
SELECT AdditionalContactInfo.query('
for $a in /aci:AdditionalContactInfo
return ($a//act:telephoneNumber, $a//act:pager)
') As Result
FROM Person.Contact
WHERE ContactID=3
Sonuç şu şekildedir:
<act:telephoneNumber xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">
<act:number>333-333-3333</act:number>
</act:telephoneNumber>
<act:telephoneNumber xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">
<act:number>333-333-3334</act:number>
</act:telephoneNumber>
<act:pager xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">
<act:number>999-555-1244</act:number>
<act:SpecialInstructions>
Page only in case of emergencies.
</act:SpecialInstructions>
</act:pager>
Filtreleme Dizileri
Bir ifadeyle döndürülen diziyi ifadeye bir yüklem ekleyerek filtreleyebilirsiniz. Daha fazla bilgi için Yol İfadeleri (XQuery) bölümüne bakınız. Örneğin, aşağıdaki sorgu üç <a> eleman düğümlerinden oluşan bir diziyi döndürür:
declare @x xml
set @x = '<root>
<a attrA="1">111</a>
<a></a>
<a></a>
</root>'
SELECT @x.query('/root/a')
Sonuç şu şekildedir:
<a attrA="1">111</a>
<a />
<a />
Yalnızca <a> attrA özniteliğine sahip elemanları almak için, önlemde bir filtre belirtebilirsiniz. Ortaya çıkan dizide yalnızca bir <a> eleman olur.
declare @x xml
set @x = '<root>
<a attrA="1">111</a>
<a></a>
<a></a>
</root>'
SELECT @x.query('/root/a[@attrA]')
Sonuç şu şekildedir:
<a attrA="1">111</a>
Bir yol ifadesinde predikat nasıl belirtileceği hakkında daha fazla bilgi için Yol İfadesi Adımında Belirtmek başlıklarına bakınız.
Aşağıdaki örnek, alt ağaçların bir dizi ifadesini oluşturur ve ardından diziye bir filtre uygular.
declare @x xml
set @x = '
<a>
<c>C under a</c>
</a>
<b>
<c>C under b</c>
</b>
<c>top level c</c>
<d></d>
'
Ifade, (/a, /b) alt ağaçlardan /a oluşan bir dizi oluşturur ve /b ortaya çıkan diziden ifade, elemanı <c>filtreler.
SELECT @x.query('
(/a, /b)/c
')
Sonuç şu şekildedir:
<c>C under a</c>
<c>C under b</c>
Aşağıdaki örnek bir önlem filtresi uygular. İfade, <>aeleman içeren <>celemanlar bulur <b> ve bu öğeler .
declare @x xml
set @x = '
<a>
<c>C under a</c>
</a>
<b>
<c>C under b</c>
</b>
<c>top level c</c>
<d></d>
'
SELECT @x.query('
(/a, /b)[c]
')
Sonuç şu şekildedir:
<a>
<c>C under a</c>
</a>
<b>
<c>C under b</c>
</b>
Uygulama Sınırlamaları
Sınırlamalar şunlardır:
XQuery aralığı ifadesi desteklenmemektedir.
Dizileri homojen olmalıdır. Özellikle, bir dizideki tüm öğeler ya düğüm ya da atomik değerler olmalıdır. Bu, statik olarak denetlendi.
Düğüm dizilerini birleştirmek, kesişme veya hariç operatörü kullanılarak birleştirilmek desteklenmez.