Aracılığıyla paylaş


İç içe for xml sorgular

De SQL Server 2000, for xml yan tümce tümce tümce yalnızca en üstte belirttiğiniz düzey select sorgusu.Öncelikle çok döndürülen sonuç xml istemci için ek bir işlem.İle başlayan SQL Server 2005, ancak xml veri türü ve for xml sorgu türü yönergesinde for xml sorgu tarafından döndürülen xml ayrıca sunucuda işlenmek üzere etkinleştir.

XML türü değişkenleri ile işleme

for xml sorgu sonucu atamak için bir xml değişkeni yazın veya XQuery sonucu sorgulamak için kullanın ve atamak için bu sonuç bir xml türü değişkeni için daha fazla işlem.

USE AdventureWorks2008R2;
GO
DECLARE @x xml;
SET @x=(SELECT ProductModelID, Name
        FROM Production.ProductModel
        WHERE ProductModelID=122 OR ProductModelID=119
        FOR XML RAW, TYPE);
SELECT @x;

-- Result

--<row ProductModelID="122" Name="All-Purpose Bike Stand" />

--<row ProductModelID="119" Name="Bike Wash" />

Ayrıca değişkeninde döndürülen xml işleme @x, birini kullanarak xml veri türü yöntemleri.Örneğin, almak ProductModelID öznitelik değerini kullanarak value() yöntem.

DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;

Aşağıdaki örnekte, FOR XML sorgu sonucu olarak döndürülür bir xml , yazın, çünkü TYPE yönergesi içinde belirtilen FOR XML yan tümce tümce tümce.

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 OR ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');

Bu sonucu verir:

<myRoot>

<row ProductModelID="122" Name="All-Purpose Bike Stand" />

<row ProductModelID="119" Name="Bike Wash" />

</myRoot>

Sonuç, çünkü xml türü, birini belirtebilirsiniz xml veri türü yöntemleri doğrudan karşı bu xml olarak gösterilen aşağıdaki sorgu.Query'de, query() yöntem (xml veri türü) ilk almak için kullanılan <row> öğesinin alt öğesi <myRoot> öğesi.

SELECT  (SELECT ProductModelID, Name
         FROM Production.ProductModel
         WHERE ProductModelID=119 OR ProductModelID=122
         FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');

Bu sonucu verir:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />

Dış sorguları xml türü örnekleri olarak iç için xml sorgu sonuçları döndürülüyor

İç içe geçmiş Yaz FOR XML burada iç sorgunun sonucunu döner olarak sorguları bir xml türü için dış sorgu.Örneğin:

SELECT Col1, 
       Col2, 
       ( SELECT Col3, Col4 
        FROM  T2
        WHERE T2.Col = T1.Col
        ...
        FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;

Önceki sorgudan aşağıdakilere dikkat edin:

  • İç tarafından oluşturulan xml FOR XML dış tarafından oluşturulan xml için sorgu eklenir FOR XML.

  • İç sorgunun belirtir TYPE yönergesi.Bu nedenle, biri iç sorgu tarafından döndürülen xml verileri, xml türü.type yönergesi belirtilmezse, iç sonucu FOR XML olarak sorgu döndürülen nvarchar(max) ve xml verilerini entitized.

Sonuç xml verileri şeklini denetleme

İç içe for xml sorgular sonuç xml verileri şeklini tanımlayan daha fazla kontrol sağlar.De SQL Server 2000, ham ve otomatik modu sorguları oluşturmak öznitelik merkezli xml tarafından varsayılan.Örneğin:

USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 OR ProductModelID=119
FOR XML RAW;

Bu öznitelik merkezli kaynaklanır:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />

<row ProductModelID="119" Name="Bike Wash" />

Alternatif olarak, belirterek tüm xml öğesi merkezli olarak alabileceğiniz ELEMENTS yönergesi.Örneğin:

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 OR ProductModelID=119
FOR XML RAW, ELEMENTS ;

Bu öğe merkezli kaynaklanır:

<row>

<ProductModelID>122</ProductModelID>

<Name>All-Purpose Bike Stand</Name>

</row>

<row>

<ProductModelID>119</ProductModelID>

<Name>Bike Wash</Name>

</row>

De SQL Server 2000, bu nedenle gerekir seçtiğiniz öznitelik merkezli ya da öğe merkezli bir xml sonucu olaraksorgusu. İle başlayan SQL Server 2005, ancak, kısmen öznitelik merkezli ve kısmen öğe merkezli bir xml yapısı oluşturmak için iç içe for xml sorgular kullanabilirsiniz.

öznitelik merkezli ve öğe merkezli bir xml ile iç içe for xml sorguları belirtme hakkında daha fazla bilgi için bkz: xml sorgu için iç içe for xml sorgu karşılaştırılması ve xml ile iç içe for xml sorgular şekillendirme.

De SQL Server 2000, sorguları kullanarak yazarak yalnızca eşdüzey öğeler oluşturmakaçık modu. Ancak, bu hantal olabilir.İle başlayan SQL Server 2005, eşi için iç içe geçmiş otomatik mod belirterek içeren xml hiyerarşileri oluşturma. xml sorgu Daha fazla bilgi için bkz: İç içe geçmiş otomatik modu sorgusu kullanarak eşi oluşturuluyor.

Kullandığınız modu ne olursa olsun, iç içe for xml sorgular sonuç xml şeklini açıklayan daha fazla kontrol sağlar.AÇIK modu sorguları yerine kullanılabilir.

Örnekler

Aşağıdaki konular, iç içe for xml sorgu örnekleri sağlar.