Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini membandingkan kueri FOR XML tingkat tunggal dengan kueri XML berlapis. Salah satu manfaat menggunakan kueri FOR XML berlapis adalah Anda dapat menentukan kombinasi XML yang ber sentris atribut dan elemen untuk hasil kueri. Contoh menunjukkan ini.
Contoh
Kueri berikut SELECT mengambil kategori produk dan informasi subkategori dalam database AdventureWorks2012 . Tidak ada XML berlapis untuk xml dalam kueri.
USE AdventureWorks2012;
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
Ini adalah hasil parsial:
<ProductCategory ProductCategoryID="1" CategoryName="Bike">
<ProductSubCategory ProductSubCategoryID="1" Name="Mountain Bike"/>
<ProductSubCategory ProductSubCategoryID="2" Name="Road Bike"/>
<ProductSubCategory ProductSubCategoryID="3" Name="Touring Bike"/>
</ProductCategory>
...
Jika Anda menentukan direktif ELEMENTS dalam kueri, Anda menerima hasil yang berpusat pada elemen, seperti yang diperlihatkan dalam fragmen hasil berikut:
<ProductCategory>
<ProductCategoryID>1</ProductCategoryID>
<CategoryName>Bike</CategoryName>
<ProductSubCategory>
<ProductSubCategoryID>1</ProductSubCategoryID>
<Name>Mountain Bike</Name>
</ProductSubCategory>
<ProductSubCategory>
...
</ProductSubCategory>
</ProductCategory>
Selanjutnya, asumsikan bahwa Anda ingin menghasilkan hierarki XML yang merupakan kombinasi XML yang berpusat pada atribut dan elemen, seperti yang ditunjukkan dalam fragmen berikut:
<ProductCategory ProductCategoryID="1" CategoryName="Bike">
<ProductSubCategory>
<ProductSubCategoryID>1</ProductSubCategoryID>
<SubCategoryName>Mountain Bike</SubCategoryName></ProductSubCategory>
<ProductSubCategory>
...
<ProductSubCategory>
...
</ProductCategory>
Dalam fragmen sebelumnya, informasi kategori produk seperti ID kategori dan nama kategori adalah atribut. Namun, informasi subkataan berfokus pada elemen. Untuk membuat <ProductCategory> elemen, Anda bisa menulis kueri seperti yang FOR XML diperlihatkan dalam hal berikut ini:
SELECT ProductCategoryID, Name as CategoryName
FROM Production.ProductCategory ProdCat
ORDER BY ProductCategoryID
FOR XML AUTO, TYPE
Ini adalah hasilnya:
< ProdCat ProductCategoryID="1" CategoryName="Bikes" />
< ProdCat ProductCategoryID="2" CategoryName="Components" />
< ProdCat ProductCategoryID="3" CategoryName="Clothing" />
< ProdCat ProductCategoryID="4" CategoryName="Accessories" />
Untuk membuat elemen berlapis <>ProductSubCategorydi XML yang Anda inginkan, Anda kemudian menambahkan kueri berlapisFOR XML, seperti yang diperlihatkan dalam hal berikut ini:
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
Perhatikan hal berikut ini di kueri sebelumnya:
Kueri dalam
FOR XMLmengambil informasi subkataan produk. DirektifELEMENTSditambahkan di dalamFOR XMLuntuk menghasilkan XML yang berpusat pada elemen yang ditambahkan ke XML yang dihasilkan oleh kueri luar. Secara default, kueri luar menghasilkan XML yang ber sentris atribut.Dalam kueri dalam, direktif
TYPEditentukan sehingga hasilnya adalah jenis xml . JikaTYPEtidak ditentukan, hasilnya dikembalikan sebagainvarchar(max)jenis dan data XML dikembalikan sebagai entitas.Kueri luar juga menentukan arahan
TYPE. Oleh karena itu, hasil kueri ini dikembalikan ke klien sebagai jenis xml .
Ini adalah hasil parsial:
<ProductCategory ProductCategoryID="1" CategoryName="Bike">
<ProductSubCategory>
<ProductSubCategoryID>1</ProductSubCategoryID>
<SubCategoryName>Mountain Bike</SubCategoryName></ProductSubCategory>
<ProductSubCategory>
...
<ProductSubCategory>
...
</ProductCategory>
Kueri berikut ini hanyalah ekstensi dari kueri sebelumnya. Ini menunjukkan hierarki produk lengkap dalam database AdventureWorks2012 . Ini termasuk yang berikut:
Kategori Produk
Subkategori produk di setiap kategori
Model produk di setiap subkataan
Produk di setiap model
Anda mungkin menemukan kueri berikut berguna dalam memahami database AdventureWorks2012 :
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
Ini adalah hasil parsial:
<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>
...
Jika Anda menghapus direktif ELEMENTS dari kueri berlapis FOR XML yang menghasilkan subkataan produk, seluruh hasilnya berpusat pada atribut. Anda kemudian dapat menulis kueri ini tanpa bersarang. Penambahan ELEMENTS hasil dalam XML yang sebagian bersifat atribut-sentris dan sebagian elemen-sentris. Hasil ini tidak dapat dihasilkan oleh kueri FOR XML tingkat tunggal.