Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Ez a cikk egy egyszintű FOR XML lekérdezést hasonlít össze egy beágyazott lekérdezéssel FOR XML . A beágyazott FOR XML lekérdezések használatának egyik előnye, hogy attribútum-központú és elemközpontú XML-t adhat meg a lekérdezési eredményekhez. A példa ezt az előnyt mutatja be.
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
Példák
Az alábbi SELECT lekérdezés lekéri a termékkategória és az alkategóriák adatait az AdventureWorks2025 adatbázisban. Nincs beágyazott FOR XML a lekérdezésben.
USE AdventureWorks2022;
GO
SELECT ProductCategory.ProductCategoryID,
ProductCategory.Name AS CategoryName,
ProductSubCategory.ProductSubCategoryID,
ProductSubCategory.Name
FROM Production.ProductCategory,
Production.ProductSubCategory
WHERE ProductCategory.ProductCategoryID = ProductSubCategory.ProductCategoryID
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;
GO
A részleges eredmény a következő:
<ProductCategory ProductCategoryID="1" CategoryName="Bike">
<ProductSubCategory ProductSubCategoryID="1" Name="Mountain Bike"/>
<ProductSubCategory ProductSubCategoryID="2" Name="Road Bike"/>
<ProductSubCategory ProductSubCategoryID="3" Name="Touring Bike"/>
</ProductCategory>
...
Ha megadja az ELEMENTS irányelvet a lekérdezésben, elemközpontú eredményt kap, ahogyan az a következő eredménytöredékben látható:
<ProductCategory>
<ProductCategoryID>1</ProductCategoryID>
<CategoryName>Bike</CategoryName>
<ProductSubCategory>
<ProductSubCategoryID>1</ProductSubCategoryID>
<Name>Mountain Bike</Name>
</ProductSubCategory>
<ProductSubCategory>
...
</ProductSubCategory>
</ProductCategory>
Ezután tegyük fel, hogy olyan XML-hierarchiát szeretne létrehozni, amely az attribútum-központú és az elemközpontú XML kombinációja, ahogyan az a következő töredékben látható:
<ProductCategory ProductCategoryID="1" CategoryName="Bike">
<ProductSubCategory>
<ProductSubCategoryID>1</ProductSubCategoryID>
<SubCategoryName>Mountain Bike</SubCategoryName></ProductSubCategory>
<ProductSubCategory>
...
<ProductSubCategory>
...
</ProductCategory>
Az előző töredékben a termékkategória adatai, például a kategóriaazonosító és a kategória neve attribútumok. Az alkategóriák információi azonban elemközpontúak. Az <ProductCategory> elem létrehozásához megírhat egy lekérdezést FOR XML az alábbiak szerint:
SELECT ProductCategoryID,
Name AS CategoryName
FROM Production.ProductCategory ProdCat
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;
Az eredmény a következő:
< ProdCat ProductCategoryID="1" CategoryName="Bikes" />
< ProdCat ProductCategoryID="2" CategoryName="Components" />
< ProdCat ProductCategoryID="3" CategoryName="Clothing" />
< ProdCat ProductCategoryID="4" CategoryName="Accessories" />
A kívánt XML <ProductSubCategory> elemeit úgy hozhatja létre, hogy hozzáad egy FOR XML beágyazott lekérdezést, ahogyan az a következő kódmintában látható.
SELECT ProductCategoryID,
Name AS CategoryName,
(
SELECT ProductSubCategoryID, Name AS SubCategoryName
FROM Production.ProductSubCategory
WHERE ProductSubCategory.ProductCategoryID = ProductCategory.ProductCategoryID
FOR XML AUTO, TYPE, ELEMENTS
)
FROM Production.ProductCategory
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE;
Jegyezze fel a következőket az előző lekérdezésben:
A belső
FOR XMLlekérdezés lekéri a termék alkategóriáinak adatait. AzELEMENTSirányelv a belsőFOR XMLrészen van hozzáadva, hogy elemközpontú XML-t hozzon létre, amelyet a külső lekérdezés által létrehozott XML-hez ad hozzá. Alapértelmezés szerint a külső lekérdezés attribútumcentrikus XML-t hoz létre.A belső lekérdezésben az
TYPEirányelv meg van adva, így az eredmény xml típusú. HaTYPEnincs megadva, az eredmény nvarchar(max) típusként lesz visszaadva, az XML-adatok pedig entitásokként lesznek visszaadva.A külső lekérdezés a
TYPEdirektívát is megadja. Ezért a lekérdezés eredménye xml-típusként lesz visszaadva az ügyfélnek.
A részleges eredmény a következő:
<ProductCategory ProductCategoryID="1" CategoryName="Bike">
<ProductSubCategory>
<ProductSubCategoryID>1</ProductSubCategoryID>
<SubCategoryName>Mountain Bike</SubCategoryName></ProductSubCategory>
<ProductSubCategory>
...
<ProductSubCategory>
...
</ProductCategory>
Az alábbi lekérdezés csak az előző lekérdezés kiterjesztése. A AdventureWorks2025 adatbázisban megjeleníti a teljes termékhierarchiát. Ez a következőket foglalja magában:
- Termékkategóriák
- Termék alkategóriák az egyes kategóriákban
- Termékmodellek az egyes alkategóriákban
- Termékek az egyes modellekben
Az adatbázis megértéséhez hasznosnak találhatja a következő lekérdezést AdventureWorks2025 :
SELECT ProductCategoryID,
Name AS CategoryName,
(
SELECT ProductSubCategoryID,
Name AS 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;
A részleges eredmény a következő:
<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>
...
Ha eltávolítja az irányelvet a ELEMENTS termék alkategóriáit létrehozó beágyazott FOR XML lekérdezésből, a teljes eredmény attribútum-központú. Ezután beágyazás nélkül is megírhatja ezt a lekérdezést. A ELEMENTS hozzáadása egy olyan XML-t eredményez, amely részben attribútumközpontú és részben elemközpontú. Ez az eredmény nem hozható létre egyszintű lekérdezéssel FOR XML .