Aracılığıyla paylaş


XML sorgular IÇIN iç içe geçmiş

Içinde SQL Server 2000, en üst düzeyinde yalnızca, bir SELECT sorgusu IÇIN XML yan tümce belirtebilirsiniz. Sonuç XML, ek işlem istemciye öncelikle döndürdü.Ile başlayan SQL Server 2005, ancak xml veri türü ve TYPE yönergesi IÇIN XML sorgularda ayrıca sunucuda işlenmek üzere FOR XML sorgu tarafından döndürülen XML etkinleştirin.

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

Sorgu sonucu IÇIN XML atayabileceğiniz bir XML değişken yazın veya XQuery sonucu sorgulamak için kullanın ve sonucunda atamak için bir XML türü değişkeni için daha fazla işlem.

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, aşağıdakilerden birini kullanarak xml Veri, yöntem türü. Örneğin, almak ProductModelID değer kullanarak öznitelik 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ülen bir xml yazın, çünkü TYPE Belirtilen yönergesini FOR XML yan tümce.

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

Bu sonucu oluşur:

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

Sonuç, çünkü xml Tür, aşağıdakilerden birini belirtebilirsiniz xml verileri doğrudan bu XML karşı yöntemleri, aşağıdaki sorguda gösterildiği gibi yazın. Sorguda, Query() yöntem (xml veri türü) <row> öğenin ilk <myRoot> öğe alt almak için kullanılır.

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 oluşur:

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

Iç IÇIN XML sorgu sonuçlar için dış sorgular türü örnekleri xml döndürülüyor

Iç içe geçmiş yazabilirsiniz FOR XML iç sorgunun sonucu olarak döndürülür sorguları bir xml dış sorguya yazın. Ö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 iç oluşturulan XML FOR XML Sorguyu dış tarafından üretilen XML eklenir FOR XML.

  • Iç sorgunun belirtir TYPE yönerge. Bu nedenle, iç sorgu tarafından döndürülen XML verilerini olur. XML türü.TYPE yönergesini belirtilirse, iç sonucu FOR XML sorgu olarak döndürüldü nvarchar(max) ve XML verilerini entitized.

Sonuç XML verileri şeklini denetleme

FOR Nested XML sorgular sonuç XML verileri şeklini tanımlamakta daha fazla denetim verir.Içinde SQL Server 2000, RAW ve AUTO modu sorguları oluşturmak öznitelik-varsayılan merkezli bir XML. Örneğin:

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW
 

Bu öznitelik merkezli sonucudur:

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

Alternatif olarak, WebForm1.aspx XML öğesi merkezli olarak alabilir ELEMENTS yönerge. Örneğin:

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

Bu öğe merkezli sonucudur:

<row>
  <ProductModelID>122</ProductModelID>
  <Name>All-Purpose Bike Stand</Name>
</row>
<row>
  <ProductModelID>119</ProductModelID>
  <Name>Bike Wash</Name>
</row>

Içinde SQL Server 2000, bu nedenle, sorgu sonucunda merkezli öznitelik veya öğe merkezli bir XML seçmeniz gerekir. Ile başlayan SQL Server 2005, ancak kısmen olan XML oluşturmak için iç içe geçmiş FOR XML sorgularını kullanabilirsiniz öznitelik - merkezli ve kısmen öğe merkezli.

Iç içe geçmiş sorguları IÇIN XML özniteliği merkezli ve öğe merkezli bir XML belirtme hakkında daha fazla bilgi için bkz: XML sorgusu IÇIN iç içe FOR XML Query'ye karşılaştırılması ve XML ile iç içe FOR XML sorgular şekillendirme.

Içinde SQL Server 2000, yalnızca AÇıK modu kullanılarak sorgu yazarak eşdüzey gerçekleştirebilmesi. Ancak, bu hantal olabilir.Ile başlayan SQL Server 2005, eşi IÇIN XML sorgular, iç içe geçmiş OTOMATIK modu belirterek içeren XML hiyerarşileri oluşturabilirsiniz. Daha fazla bilgi için bkz:Bir iç içe AUTO modu sorgusu kullanarak, eşi oluşturuluyor.

Kullandığınız, hangi modu ne olursa olsun, iç içe geçmiş FOR XML sorgular sonuç XML şeklini tanımlayan, daha fazla denetim sağlar.Yerine, AÇıK modu sorguları kullanılabilir.

Örnekler

Aşağıdaki konular, iç içe geçmiş FOR XML sorgusuna örnekler sağlar.