Aracılığıyla paylaş


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

Bu konuda kullanma yönergeleri açıklanmaktadır xml Veri, yöntem türü.

The xml data type methods cannot be used in the PRINT deyim as shown in the following example.The xml data type methods are treated as subqueries, and subqueries are not allowed in the PRINT deyim.Sonuç olarak, aşağıdaki örnek hata verir:

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) 

Ilk sonucu atamak için BIR çözüm olan Value() değişken yöntemeXML yazın ve sonra da sorguda 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ümce

The xml data type methods are treated internally as subqueries.GROUP BY bir skaler gerektirir ve toplamları ve alt sorgular izin vermiyor belirleyemezsiniz XML veri yöntemleri, GROUP BY yan tümcesinde yazın.Bir çözüm içinde XML yöntemlerini kullanan kullanıcı tanımlı bir işlev çağırmaktır.

Hata Raporlama

Hatalar, raporlarken XML veri türü yöntemlerini tek bir hata aşağıdaki biçimde yükseltmenizi:

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

Aynı cinsten tek adet çek

Konum adımları ve işlev parametreleri singletons derleyici tek çalışma sırasında garanti karar veremezse, bir hata döndürecektir gerektiren bir işleç saat.Bu sorun, türlenmemiş veriyle sık ortaya çıkar.Örneğin, özniteliğin arama, bir tek üst öğesi gerektirir.Tek bir üst düğüm seçer bir sıra yeterli olur.Değerinin hesaplanması bir node()-Value() birleşik öznitelik değerlerini ayıklamak için sıra belirtimi gerektirebilir.Bu örnek gösterilir.

Örnek: Bilinen Singleton

Bu örnekte, Nodes() yöntem, her bir <book> öğesi için ayrı bir satır oluşturur.The value() yöntem that is evaluated on a <book> node extracts the value of @genre and, being an öznitelik, is a singleton.

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

XML şeması yazılı XML'SINI denetleme için kullanılır.Bir düğüm, XML şemasındaki tek olarak belirtilirse, derleyici bu bilgileri kullanır ve hiçbir hata oluşur.Aksi takdirde, tek bir düğüm seçer bir sıra gereklidir.Özellikle, alt veya eksen kullanımını (/ /) ekseni, örneğin rehberi / /, başlık, aynı cinsten tek adet önem kesmesi için looses <Başlık> öğe bile için XML şemasını, bunu olmasını belirtir. Bu nedenle, olarak yeniden (rehberi / / title) [1].

//First-name[1 arasındaki farkı haberdar kalması önemlidir] ve (//first-name)[1] tür denetimi için.Önceki bir dizi verir <ilk adı> her düğümün en soldaki olan düğümler <ilk adı> düğümü eşdeğerleri arasında. Bu sonuncusu ilk aynı cinsten tek adet verir <ilk adı> örnek XML belgesi sırada düğüm.

Örnek: Value() kullanma

Statik bir türlenmemiş bir XML sütun üzerinde aşağıdaki sorgu sonuçlar, çünkü derleme error.This Value() ilk bağımsız değişken olarak bir tek düğüm bekler ve bir derleyici < > son-ad için yalnızca bir düğümün zamanında oluşacağını olup olmadığını belirleyemiyor:

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

Bir çözümü, düşünebilirsiniz aşağıdadır:

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

Ancak, bu çözüm hata nedeniyle çözmüyor birden çok <author> düğümlerin, her bir XML örnek oluşabilir. Aşağıdaki yeniden yazan çalışır:

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

Bu sorguyu ilk değerini verir... <last-name> Her bir XML örnek öğe.