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.
Contoh berikut mengilustrasikan penggunaan mode OTOMATIS. Banyak dari kueri ini ditentukan terhadap dokumen XML instruksi manufaktur sepeda yang disimpan di kolom Instruksi tabel ProductModel dalam database sampel AdventureWorks2012.
Contoh: Mengambil informasi pelanggan, pesanan, dan detail pesanan
Kueri ini mengambil informasi pelanggan, pesanan, dan detail pesanan untuk pelanggan tertentu.
USE AdventureWorks2012;
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
Detail.SalesOrderID, Detail.LineTotal, Detail.ProductID,
Product.Name,
Detail.OrderQty
FROM Sales.Customer AS Cust
INNER JOIN Sales.SalesOrderHeader AS OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
INNER JOIN Sales.SalesOrderDetail AS Detail
ON OrderHeader.SalesOrderID = Detail.SalesOrderID
INNER JOIN Production.Product AS Product
ON Product.ProductID = Detail.ProductID
WHERE Cust.CustomerID IN (29672, 29734)
ORDER BY OrderHeader.CustomerID,
OrderHeader.SalesOrderID
FOR XML AUTO;
Karena kueri mengidentifikasi alias tabel Cust, OrderHeader, Detail, dan Product, elemen terkait dihasilkan oleh mode AUTO. Sekali lagi, urutan tabel diidentifikasi oleh kolom yang ditentukan dalam SELECT klausul menentukan hierarki elemen-elemen ini.
Ini adalah hasil parsial.
<Cust CustomerID="29672">
<OrderHeader CustomerID="29672" SalesOrderID="43660">
<Detail SalesOrderID="43660" LineTotal="874.794000" ProductID="758" OrderQty="1">
<Product Name="Road-450 Red, 52" />
</Detail>
<Detail SalesOrderID="43660" LineTotal="419.458900" ProductID="762" OrderQty="1">
<Product Name="Road-650 Red, 44" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="29672" SalesOrderID="47660">
<Detail SalesOrderID="47660" LineTotal="469.794000" ProductID="765" OrderQty="1">
<Product Name="Road-650 Black, 58" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="29672" SalesOrderID="49857">
<Detail SalesOrderID="49857" LineTotal="44.994000" ProductID="852" OrderQty="1">
<Product Name="Women's Tights, S" />
</Detail>
</OrderHeader>
...
</Cust>
Contoh: Menentukan fungsi GROUP BY dan agregat
Kueri berikut mengembalikan ID pelanggan individual dan jumlah pesanan yang telah diminta pelanggan.
USE AdventureWorks2012;
GO
SELECT C.CustomerID, COUNT(*) AS NoOfOrders
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
On C.CustomerID = SOH.CustomerID
GROUP BY C.CustomerID
FOR XML AUTO;This is the partial result:
<I CustomerID="11000" NoOfOrders="3" />
<I CustomerID="11001" NoOfOrders="3" />
...
Contoh: Menentukan kolom komputasi dalam mode OTOMATIS
Kueri ini mengembalikan nama pelanggan individual yang digabungkan dan informasi pesanan. Karena kolom yang dihitung ditetapkan ke tingkat terdalam yang ditemui pada saat itu, misalnya elemen <SOH> dalam contoh ini. Nama pelanggan yang digabungkan ditambahkan sebagai atribut <SOH> elemen dalam hasilnya.
USE AdventureWorks2012;
GO
SELECT P.FirstName + ' ' + P.LastName AS Name,
SOH.SalesOrderID
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
INNER JOIN Person.Person AS P
ON P.BusinessEntityID = C.PersonID
FOR XML AUTO;
Ini adalah hasil parsial:
<SOH Name="Jon Yang" SalesOrderID="43793" />
<SOH Name="Eugene Huang" SalesOrderID="43767" />
Untuk mengambil elemen <IndividualCustomer> yang memiliki atribut Name dan menyertakan setiap informasi header pesanan penjualan sebagai subelemen, kueri ini ditulis ulang menggunakan subquery. Proses "inner select" membuat tabel sementara IndividualCustomer dengan kolom terhitung yang berisi nama pelanggan individu. Tabel ini kemudian digabungkan ke SalesOrderHeader tabel untuk mendapatkan hasilnya.
Harap dicatat bahwa tabel Sales.Customer menyimpan informasi pelanggan individual, termasuk nilai PersonID untuk pelanggan tersebut. Ini PersonID kemudian digunakan untuk menemukan nama kontak dari Person.Person tabel.
SELECT IndividualCustomer.Name, SOH.SalesOrderID
FROM (SELECT FirstName+ ' '+LastName AS Name, C.PersonID, C.CustomerID
FROM Sales.Customer AS C, Person.Person AS P
WHERE C.PersonID = P.BusinessEntityID) AS IndividualCustomer
LEFT OUTER JOIN Sales.SalesOrderHeader AS SOH
ON IndividualCustomer.CustomerID = SOH.CustomerID
ORDER BY IndividualCustomer.CustomerID, SOH.CustomerIDFOR XML AUTO;
Ini adalah hasil parsial:
<IndividualCustomer Name="Jon Yang">
<SOH SalesOrderID="43793" />
<SOH SalesOrderID="51522" />
<SOH SalesOrderID="57418" />
</IndividualCustomer>
...
...
Contoh: Mengembalikan data biner
Kueri ini mengembalikan foto produk dari ProductPhoto tabel.
ThumbNailPhoto adalah kolom varbinary(max) dalam tabel ProductPhoto. Secara default, mode AUTO menghasilkan referensi data biner yang merupakan URL relatif terhadap akar virtual dari database tempat kueri dijalankan. Atribut ProductPhotoID kunci harus ditentukan untuk mengidentifikasi gambar. Dalam mengambil referensi gambar seperti yang diilustrasikan dalam contoh ini, kunci utama tabel juga harus ditentukan dalam SELECT klausa untuk mengidentifikasi baris secara unik.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO;
Ini adalah hasilnya:
-- result
<Production.ProductPhoto
ProductPhotoID="70"
ThumbNailPhoto= "dbobject/Production.ProductPhoto[@ProductPhotoID='70']/@ThumbNailPhoto" />
Kueri yang sama dilakukan menggunakan opsi BINARY BASE64. Kueri mengembalikan data biner dalam format yang dikodekan base64.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO, BINARY BASE64;
Ini adalah hasilnya:
-- result
<Production.ProductPhoto ProductPhotoID="70" ThumbNailPhoto="Base64 encoded photo" />
Secara default, saat Anda menggunakan mode OTOMATIS untuk mengambil data biner, referensi ke URL relatif ke akar virtual database tempat kueri dijalankan akan dikembalikan alih-alih data biner. Ini akan terjadi jika opsi BINARY BASE64 tidak ditentukan.
Saat mode AUTO mengembalikan referensi URL ke data biner dalam database yang tidak peka huruf besar/kecil di mana nama tabel atau kolom yang ditentukan dalam kueri tidak cocok dengan nama tabel atau kolom dalam database, kueri akan dijalankan. Namun, kasus yang disebutkan dalam referensi tidak akan konsisten. Contohnya:
SELECT ProductPhotoID, ThumbnailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO;
Ini adalah hasilnya:
<Production.PRODUCTPHOTO
PRODUCTPHOTOID="70"
THUMBNAILPHOTO= "dbobject/Production.PRODUCTPHOTO[@ProductPhotoID='70']/@ThumbNailPhoto" />
Ini bisa menjadi masalah terutama saat kueri dbobject dijalankan terhadap database yang peka huruf besar/kecil. Untuk menghindari hal ini, kasus nama tabel atau kolom yang ditentukan dalam kueri harus cocok dengan kasus nama tabel atau kolom dalam database.
Contoh: Memahami pengodean
Contoh ini menunjukkan berbagai pengodean yang terjadi dalam hasilnya.
Buat tabel ini:
CREATE TABLE [Special Chars] (Col1 char(1) primary key, [Col#&2] varbinary(50));
Tambahkan data berikut ke tabel:
INSERT INTO [Special Chars] VALUES ('&', 0x20), ('#', 0x20);
Kueri ini mengembalikan data dari tabel. Mode FOR XML AUTO telah ditentukan. Data biner dikembalikan sebagai referensi.
SELECT * FROM [Special Chars] FOR XML AUTO;
Ini adalah hasilnya:
<Special_x0020_Chars
Col1="#"
Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='#']/@Col_x0023__x0026_2"
/>
<Special_x0020_Chars
Col1="&"
Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='&']/@Col_x0023__x0026_2"
/>
Ini adalah proses untuk mengodekan karakter khusus dalam hasilnya:
Dalam hasil kueri, karakter XML dan URL khusus dalam elemen dan nama atribut yang dikembalikan dikodekan dengan menggunakan nilai heksadesimal dari karakter Unicode yang sesuai. Pada hasil sebelumnya, nama <
Special Chars> elemen dikembalikan sebagai .<Special_x0020_Chars> Nama atribut <Col#&2> dikembalikan sebagai <Col_x0023__x0026_2>. Karakter khusus XML dan URL dikodekan.Jika nilai elemen atau atribut berisi salah satu dari lima entitas karakter XML standar (', "", <, >, dan &), karakter XML khusus ini selalu dikodekan menggunakan pengodean karakter XML. Pada hasil sebelumnya, nilai
&dalam nilai atribut <Col1> dikodekan sebagai&. Namun, karakter # tetap #, karena merupakan karakter XML yang valid dan bukan karakter XML khusus.Jika nilai elemen atau atribut berisi karakter URL khusus yang memiliki arti khusus dalam URL, nilai tersebut hanya dikodekan dalam nilai URL DBOBJECT dan hanya dikodekan ketika karakter khusus adalah bagian dari nama tabel atau kolom. Dalam hasilnya, karakter
#yang merupakan bagian dari namaCol#&2tabel dikodekan sebagai_x0023_ in the DBOJBECT URL.