Aracılığıyla paylaş


Xml veri türü yöntemlerini kullanma yönergeleri

Bu konuda kullanma yönergeleri açıklanır xml veri türü yöntemleri.

Xml veri türü yöntemleri aşağıdaki örnekte gösterildiği gibi yazdırma deyim kullanılamaz.Xml veri türü yöntemleri listesindekiler gibi kabul edilir ve alt sorgular yazdırma deyimiçinde izin verilmez.Sonuç olarak, aşağıdaki örnek, bir hata döndürür:

DECLARE @x xml
SET @x = '<root>Hello</root>'
PRINT @x.value('/root[1]', 'varchar(20)') -- will not work because this is treated as a subquery (select top 1 col from table) 

İlk sonucunu atamak için bir çözümdür value() yöntem bir değişken xml yazın ve sonra sorgu değişkeni belirtin.

DECLARE @x xml
DECLARE @c varchar(max)
SET @x = '<root>Hello</root>'
SET @c = @x.value('/root[1]', 'varchar(11)')
PRINT @c                                                      

group by yan tümcesi

Xml veri türü yöntemleri dahili listesindekiler gibi işlenir.Grup tarafından bir skaler gerektirir ve toplamları ve alt sorgular izin vermiyor çünkü belirtemezsiniz xml veri türü yöntemleri group by yan tümcetümcesinde.Bir iç in xml yöntemlerini kullanan bir kullanıcı tanımlı işlev çağırmak için çözümdür.

Hata raporlama

Hataları raporlarken xml veri türü yöntemleri aşağıdaki biçimde tek bir hata yükseltmek:

Msg errorNumber, Level levelNumber, State stateNumber:
XQuery [database.table.method]: description_of_error

Örneğin:

Msg 2396, Level 16, State 1:
XQuery [xmldb_test.xmlcol.query()]: Attribute may not appear outside of an element

Singleton denetimleri

Derleyici tek çalışma saatsırasında garantili olup olmadığını belirleyemezseniz konum adımlar, işlev parametreleri ve nesnelerinin gerektiren operatörler bir hata döndürecektir.Bu sorun sık untyped verilerle oluşur.Örneğin, arama öznitelik bir singleton üst öğe gerektiriyor.Bir tek ana düğüm seçer bir sıra yeterlidir.Değerlendirmesini bir node()-value() birlikteöznitelik değerleri ayıklamakiçin sıra belirtimi değil gerektirir. Bu, sonraki örnekte gösterilir.

Örnek: Bilinen tek

Bu örnekte, nodes() yöntem her biri için ayrı bir satır oluşturur <book> öğesi.Value() üzerinde değerlendiriliryöntem bir <book> düğümü @ Tarz değerini ayıklar ve tek bir öznitelikolmasının, iş.

SELECT nref.value('@genre', 'varchar(max)') LastName
FROM   T CROSS APPLY xCol.nodes('//book') AS R(nref)

xml schema, tür denetimi yazılı XML için kullanılır.Bir düğüm xml şemasında bir singleton olarak belirtilir, derleyici bu bilgileri kullanır ve herhangi bir hata oluşur.Aksi halde, tek bir düğüm seçer bir sıra gereklidir.Özellikle, alt veya kendini eksen kullanımı (/ /) eksengibi/kitap / / başlık, singleton kardinalite kesmesi için looses <başlığı> öğesi olsa da böyle olmasını xml şema belirtir.Bu nedenle, olarak yazmalıdır (/ kitap / / title) [1].

//First-name[1 arasındaki farkın farkında kalır önemlidir] ve ([//first-name)[1] tür denetimi.Eski bir dizisini döndürür <ilk adı> düğümlerin her düğüm olduğu en soldaki <ilk adı> düğümü eşdeğerleri arasında.İkincisi ilk singleton verir <ilk adı> belgeyi sırayla örnekxml düğümü.

Örnek: Value() kullanma

Aşağıdaki sorgu bir untyped xml sütun sonuçlar statik, derleme hatasıüzerine.Çünkü value() ilk bağımsız değişken ve derleyici yalnızca bir olup olmadığını belirleyemiyor gibi tek düğüm bekler <son adı> düğüm, çalışma saatsırasında gerçekleşir:

SELECT xCol.value('//author/last-name', 'nvarchar(50)') LastName
FROM   T

Düşünün bir çözüm aşağıda verilmiştir:

SELECT xCol.value('//author/last-name[1]', 'nvarchar(50)') LastName
FROM   T

Ancak, bu çözüm hatası nedeniyle çözmüyor birden çok <author> düğümlerin her xml örnekortaya çıkabilecek.Aşağıdaki yeniden yazan çalışır:

SELECT xCol.value('(//author/last-name/text())[1]', 'nvarchar(50)') LastName
FROM   T

Bu sorgu ilk değeri döndürür <last-name> her bir xml örneköğesinde.

Ayrıca bkz.

Kavramlar

Diğer Kaynaklar