Share via


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

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

Xml veri türü yöntemleri PRINT deyimi aşağıdaki örnekte gösterildiği gibi kullanılamaz. Xml veri türü yöntemleri tedavi alt sorgular ve alt sorgular PRINT deyimi iç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) 

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 sonuç atamak için bir çözüm olduğunu value() değişken yönteme 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                                                      
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 tedavi dahili alt sorgular. Çünkü grupla sayıl gerektirir ve toplamları ve alt sorgular izin vermez, belirtemezsiniz xml veri türü yöntemleri group by yan tümcesinde. xml yöntemleri içinde onu kullanan kullanıcı tanımlı bir işlev çağrısı için bir çö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

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

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

Tek denetimleri

Konum adımlar, işlev parametreleri ve araştırmacılara bir hata döndürecektir derleyici bir singleton, garantili olup olmadığını belirleyemiyor gerektiren operatörler Saat çalıştırın. Bu sorun sık yazılmamış veri ile oluşur. Örneğin, bir tek üst öğe arama özniteliği gerektirir. Bir tek üst düğüm seçer bir sıra yeterlidir. Değerlendirme bir node()-value() öznitelik değerleri ayıklamak için kombinasyon değil sıra belirtimi gerektirebilir. Bu sonraki örnekte gösterilmiştir.

Örnek: Bilinen tek

Bu örnekte, nodes() yöntemi her biri için ayrı bir satır oluşturur <book> öğesi. Value() üzerinde değerlendirilen yöntemi bir <book> düğümü çıkarır @ tür değeri ve bir öznitelik, tek olma.

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

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

Yazılı xml denetimi türü için xml şeması kullanılır. Bir düğüm, xml şemasında tek olarak belirtilirse, derleyici bu bilgileri kullanır ve herhangi bir hata oluşur. Aksi takdirde, tek bir düğüm seçer bir sıra gereklidir. Özellikle, alt veya kendini eksen kullanımı (/ /) eksen, gibi/book / / başlık, tek önem kesmesi için kalktığında <başlığı> öğesi, bile bu kadar xml şema belirtir. Bu nedenle, olarak yazmak (/ book / / başlık) [1].

//First-name[1 arasındaki farkı bilincinde önemlidir] ve (//first-name)[1] tür denetlemesi için. Eski bir dizisini döndürür <ilk adı> düğümlerin her düğüm olduğu soldaki <ilk adı> düğümü eşdeğerleri arasında. İkincisi ilk tek döner <ilk adı> xml örneği sırada belge düğümü.

Örnek: value() kullanma

Aşağıdaki sorgu yazılmamış xml sütun üzerinde statik bir derleme hatası oluşur.Bunun sebebi value() ilk bağımsız ve derleyici tek olup olmadığını belirleyemiyor gibi tek düğüm bekler <last-name> düğüm, çalışma zamanında gerçekleşir:

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

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

Aşağıda gördüğünüz bir çözümdür:

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

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

Ancak, bu hata nedeniyle çözüm değil birden fazla <author> düğümlerin her xml örneğinde oluşabilir. Aşağıdaki yeniden çalışır:

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

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

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

Ayrıca bkz.

Diğer Kaynaklar

XML veri türü yöntemleri