Kolom dengan nama
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Berikut ini adalah kondisi spesifik di mana kolom set baris dengan nama dipetakan, peka huruf besar/kecil, ke XML yang dihasilkan:
Nama kolom dimulai dengan tanda (
@
).Nama kolom tidak dimulai dengan tanda (
@
).Nama kolom tidak dimulai dengan tanda saat (
@
) dan berisi tanda garis miring (/
).Beberapa kolom berbagi awalan yang sama.
Satu kolom memiliki nama yang berbeda.
Nama kolom dimulai dengan tanda (@
)
Jika nama kolom dimulai dengan tanda (@
) dan tidak berisi tanda garis miring (/
), atribut row
elemen yang memiliki nilai kolom yang sesuai dibuat. Misalnya, kueri berikut mengembalikan set baris dua kolom (@PmId, Name
). Dalam XML yang PmId
dihasilkan, atribut ditambahkan ke elemen yang row
sesuai dan nilai ProductModelID
ditetapkan untuk itu.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Ini adalah hasilnya:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Atribut harus datang sebelum jenis node lain, seperti node elemen dan node teks, dalam tingkat yang sama. Kueri berikut akan mengembalikan kesalahan:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Nama kolom tidak dimulai dengan tanda (@
)
Jika nama kolom tidak dimulai dengan tanda (@
), bukan salah satu pengujian simpul XPath, dan tidak berisi tanda garis miring (/
), elemen XML yang merupakan subelemen elemen baris, row
secara default, dibuat.
Kueri berikut menentukan nama kolom, hasilnya. Oleh karena itu, result
anak elemen ditambahkan ke row
elemen .
SELECT 2 + 2 as result
for xml PATH;
Ini adalah hasilnya:
<row>
<result>4</result>
</row>
Kueri berikut menentukan nama kolom, ManuWorkCenterInformation
, untuk XML yang dikembalikan oleh XQuery yang ditentukan terhadap Instructions
kolom jenis xml . Oleh karena itu, ManuWorkCenterInformation
elemen ditambahkan sebagai turunan dari row
elemen .
SELECT
ProductModelID,
Name,
Instructions.query(
'declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location
') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH;
Ini adalah hasilnya:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
Nama kolom tidak dimulai dengan tanda (@
) dan berisi tanda garis miring (/
)
Jika nama kolom tidak dimulai dengan tanda (@
), tetapi berisi tanda garis miring (/
), nama kolom menunjukkan hierarki XML. Misalnya, jika nama kolom adalah "Name1/Name2/Name3.../Namen", setiap Namai mewakili nama elemen yang ditumpuk dalam elemen baris saat ini (untuk i = 1) atau yang berada di bawah elemen yang memiliki nama Namai-1. Jika Naman dimulai dengan @
, nama dipetakan ke atribut elemen Naman-1 .
Misalnya, kueri berikut mengembalikan ID dan nama karyawan yang direpresentasikan sebagai elemen EmpName
kompleks yang berisi First
nama , Middle
, dan Last
.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH;
Nama kolom digunakan sebagai jalur dalam membangun XML dalam mode PATH. Nama kolom yang berisi nilai ID karyawan, dimulai dengan '@'. Oleh karena itu, atribut, EmpID
, ditambahkan ke row
elemen . Semua kolom lainnya menyertakan tanda garis miring (/
) dalam nama kolom yang menunjukkan hierarki. XML yang dihasilkan akan memiliki EmpName
anak di bawah row
elemen , dan EmpName
anak akan memiliki First
, Middle
dan Last
elemen turunan.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
Nama tengah karyawan null dan, secara default, nilai null memetakan ke tidak adanya elemen atau atribut. Jika Anda ingin elemen yang dihasilkan untuk nilai NULL, Anda dapat menentukan arahan ELEMENTS dengan XSINIL seperti yang ditunjukkan dalam kueri ini.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH, ELEMENTS XSINIL;
Ini adalah hasilnya:
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EmpID="1">
<EmpName>
<First>Gustavo</First>
<Middle xsi:nil="true" />
<Last>Achong</Last>
</EmpName>
</row>
Secara default, mode PATH menghasilkan XML yang bersentrik elemen. Oleh karena itu, menentukan arahan ELEMENTS dalam kueri mode PATH tidak berpengaruh. Namun, seperti yang ditunjukkan pada contoh sebelumnya, arahan ELEMENTS berguna dengan XSINIL untuk menghasilkan elemen untuk nilai null.
Selain ID dan nama, kueri berikut mengambil alamat karyawan. Sesuai jalur dalam nama kolom untuk kolom alamat, Address
elemen anak ditambahkan ke row
elemen dan detail alamat ditambahkan sebagai turunan elemen elemen Address
.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City"
FROM HumanResources.Employee E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Ini adalah hasilnya:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Beberapa kolom berbagi awalan jalur yang sama
Jika beberapa kolom berikutnya berbagi awalan jalur yang sama, kolom tersebut dikelompokkan bersama dengan nama yang sama. Jika awalan namespace yang berbeda digunakan bahkan jika terikat ke namespace yang sama, jalur dianggap berbeda. Di kueri sebelumnya, FirstName
kolom , MiddleName
, dan LastName
memiliki awalan yang sama EmpName
. Oleh karena itu, mereka ditambahkan sebagai anak-anak dari EmpName
elemen . Ini juga terjadi ketika Anda membuat Address
elemen dalam contoh sebelumnya.
Satu kolom memiliki nama yang berbeda
Jika kolom dengan nama yang berbeda muncul di antaranya, kolom tersebut akan merusak pengelompokan, seperti yang diperlihatkan dalam kueri yang dimodifikasi berikut ini. Kueri memutus pengelompokan FirstName
, , MiddleName
dan LastName
, seperti yang ditentukan dalam kueri sebelumnya, dengan menambahkan kolom alamat di antara FirstName
kolom dan MiddleName
.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.EmployeeAddress E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Akibatnya, kueri membuat dua EmpName
elemen. Elemen pertama EmpName
memiliki FirstName
elemen anak dan elemen kedua EmpName
memiliki MiddleName
elemen dan LastName
elemen anak.
Ini adalah hasilnya:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>