Udostępnij przez


W porównaniu z zagnieżdżonych kwerendy XML dla kwerendy XML

W tym temacie porównuje kwerendy XML poziom zagnieżdżonych kwerendy XML dla.Jest jedną z zalet korzystania z kwerend zagnieżdżonych XML dla określenia kombinacji zorientowany atrybut i zorientowany na element XML dla wyniki kwerendy.W przykładzie pokazano to.

Przykład

Następujące SELECT kwerenda pobiera informacje kategorii i podkategorii produktu w AdventureWorks2008R2 bazy danych.Istnieje nr zagnieżdżony w kwerendzie XML.

USE AdventureWorks2008R2;
GO
SELECT   ProductCategory.ProductCategoryID, 
         ProductCategory.Name as CategoryName,
         ProductSubcategory.ProductSubcategoryID, 
         ProductSubcategory.Name
FROM     Production.ProductCategory
INNER JOIN Production.ProductSubcategory
    ON ProductCategory.ProductCategoryID = ProductSubcategory.ProductCategoryID
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;
GO

Jest to wynik częściowy:

<ProductCategory ProductCategoryID="1" CategoryName="Bike">

<ProductSubCategory ProductSubCategoryID="1" Name="Mountain Bike"/>

<ProductSubCategory ProductSubCategoryID="2" Name="Road Bike"/>

<ProductSubCategory ProductSubCategoryID="3" Name="Touring Bike"/>

</ProductCategory>

...

Jeśli określisz ELEMENTS dyrektywa w kwerendzie, zostanie wyświetlony element wyśrodkowany na wynik, jak pokazano w następującym fragmencie wynik:

<ProductCategory>

<ProductCategoryID>1</ProductCategoryID>

<CategoryName>Bike</CategoryName>

<ProductSubCategory>

<ProductSubCategoryID>1</ProductSubCategoryID>

<Name>Mountain Bike</Name>

</ProductSubCategory>

<ProductSubCategory>

...

</ProductSubCategory>

</ProductCategory>

Przyjmijmy dalej, chcesz wygenerować hierarchii XML, który jest kombinacją zorientowany atrybut i zorientowany na element XML, jak pokazano w następującym fragmencie:

<ProductCategory ProductCategoryID="1" CategoryName="Bike">

<ProductSubCategory>

<ProductSubCategoryID>1</ProductSubCategoryID>

<SubCategoryName>Mountain Bike</SubCategoryName></ProductSubCategory>

<ProductSubCategory>

...

<ProductSubCategory>

...

</ProductCategory>

W poprzednim fragmencie produktów kategorii informacji, takich jak identyfikator kategorii i nazwa kategorii są atrybuty.Jednak informacje podkategorii jest zorientowany na element.Do konstruowania <ProductCategory> element, można napisać FOR XML kwerendy, jak pokazano poniżej:

SELECT ProductCategoryID, Name as CategoryName
FROM Production.ProductCategory ProdCat
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;

Jest to wynikiem:

< ProdCat ProductCategoryID="1" CategoryName="Bikes" />

< ProdCat ProductCategoryID="2" CategoryName="Components" />

< ProdCat ProductCategoryID="3" CategoryName="Clothing" />

< ProdCat ProductCategoryID="4" CategoryName="Accessories" />

Do konstruowania zagnieżdżony <ProductSubCategory> ma elementy XML, następnie dodać zagnieżdżone FOR XML kwerendy, jak pokazano poniżej:

SELECT ProductCategoryID, Name as CategoryName,
       (SELECT ProductSubcategoryID, Name SubcategoryName
        FROM   Production.ProductSubcategory
        WHERE ProductSubcategory.ProductCategoryID = 
              ProductCategory.ProductCategoryID
        FOR XML AUTO, TYPE, ELEMENTS
       )
FROM Production.ProductCategory
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;

Poniższe w poprzedniej kwerendy:

  • Wewnętrzne FOR XML kwerenda pobiera informacje podkategoria produktu.ELEMENTS Dyrektywy dodaje się w wewnętrznych FOR XML do generowania zorientowany na element XML, który został dodany do pliku XML wygenerowanego przez kwerendę zewnętrznego.Domyślnie zewnętrznej kwerendy generuje zorientowany atrybut XML.

  • W kwerendzie wewnętrzne TYPE dyrektywy jest określony, więc wynik jest xml typu.Jeśli TYPE nie określono, wyniki są zwracane jako nvarchar(max) typu i dane XML są zwracane jako podmioty.

  • Kwerenda zewnętrznego określa również TYPE dyrektywy.Dlatego wyników tej kwerendy jest zwracany do klient jako xml typu.

Jest to wynik częściowy:

<ProductCategory ProductCategoryID="1" CategoryName="Bike">

<ProductSubCategory>

<ProductSubCategoryID>1</ProductSubCategoryID>

<SubCategoryName>Mountain Bike</SubCategoryName></ProductSubCategory>

<ProductSubCategory>

...

<ProductSubCategory>

...

</ProductCategory>

Następująca kwerenda jest tylko rozszerzenie poprzedniej kwerendy.Pokazuje hierarchię pełnego produktu w AdventureWorks2008R2 bazy danych.To obejmuje:

  • Kategorie produktów

  • Podkategorie produktów w każdej kategorii

  • Modele produktów w każdej podkategorii

  • Produkty w każdym modelu

Może być przydatne następującej kwerendy w uzgodnieniu AdventureWorks2008R2 bazy danych:

SELECT ProductCategoryID, Name as CategoryName,
       (SELECT ProductSubcategoryID, Name SubcategoryName,
               (SELECT ProductModel.ProductModelID, 
                       ProductModel.Name as ModelName,
                       (SELECT ProductID, Name as ProductName, Color
                        FROM   Production.Product
                        WHERE  Product.ProductModelID = 
                               ProductModel.ProductModelID
                        FOR XML AUTO, TYPE)
                FROM   (SELECT DISTINCT ProductModel.ProductModelID, 
                               ProductModel.Name
                        FROM   Production.ProductModel, 
                               Production.Product
                        WHERE  ProductModel.ProductModelID = 
                               Product.ProductModelID
                        AND    Product.ProductSubcategoryID = 
                               ProductSubcategory.ProductSubcategoryID) 
                                  ProductModel
                FOR XML AUTO, type
               )
        FROM Production.ProductSubcategory
        WHERE ProductSubcategory.ProductCategoryID = 
              ProductCategory.ProductCategoryID
        FOR XML AUTO, TYPE, ELEMENTS
       )
FROM Production.ProductCategory
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;

Jest to wynik częściowy:

<Production.ProductCategory ProductCategoryID="1" CategoryName="Bikes">

<Production.ProductSubCategory>

<ProductSubCategoryID>1</ProductSubCategoryID>

<SubCategoryName>Mountain Bikes</SubCategoryName>

<ProductModel ProductModelID="19" ModelName="Mountain-100">

<Production.Product ProductID="771"

ProductName="Mountain-100 Silver, 38" Color="Silver" />

<Production.Product ProductID="772"

ProductName="Mountain-100 Silver, 42" Color="Silver" />

<Production.Product ProductID="773"

ProductName="Mountain-100 Silver, 44" Color="Silver" />

</ProductModel>

Jeśli usuniesz ELEMENTS dyrektywy od zagnieżdżony FOR XML kwerendę, która generuje podkategorie produktów cały wynik jest zorientowany atrybut.Następnie można zapisywać kwerendy bez zagnieżdżania.Dodanie ELEMENTS wyniki w XML jest częściowo atrybut zorientowany i częściowo element zorientowany.Wynik ten nie może być generowane przez jedno -poziom, XML dla kwerendy.

Zobacz także

Odwołanie