Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Aşağıda, bir ada sahip satır kümesi sütunlarının sonuçta elde edilen XML ile eşlendiği, büyük/küçük harfe duyarlı olduğu belirli koşullar yer alır:
Sütun adı bir at işaretiyle (
@) başlar.Sütun adı @ işaretiyle (
@) başlamıyor.Sütun adı at işaretiyle (
@) başlamaz ve eğik çizgi işareti içerir (/).Birkaç sütun aynı ön eki paylaşır.
Bir sütunun adı farklıdır.
Sütun adı bir at işaretiyle (@) başlar
Sütun adı bir at işareti (@) ile başlıyorsa ve eğik çizgi işareti (/ içermiyorsa), ilgili sütun değerine sahip öğenin özniteliği row oluşturulur. Örneğin, aşağıdaki sorgu iki sütunlu (@PmId, Name) bir satır kümesi döndürür. Sonuçta elde edilen XML'de, ilgili PmId öğesine bir row öznitelik eklenir ve bu özniteliğe ProductModelID değeri atanır.
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Sonuç şu şekildedir:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Öznitelikler, öğe düğümleri ve metin düğümleri gibi diğer düğüm türlerinden önce aynı düzeyde gelmelidir. Aşağıdaki sorgu bir hata döndürür:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Sütun adı at işaretiyle (@) başlamıyor
Sütun adı bir at işaretiyle (@) başlamıyorsa, XPath düğümü testlerinden biri değilse ve bir eğik çizgi işareti (/) içermiyorsa, varsayılan olarak satır öğesinin alt öğesi olan bir XML öğesi oluşturulur.
Aşağıdaki sorgu sütun adını ve sonucu belirtir. Bu nedenle, result öğesine bir row alt öğesi eklenir.
SELECT 2 + 2 as result
for xml PATH;
Sonuç şu şekildedir:
<row>
<result>4</result>
</row>
Aşağıdaki sorgu, ManuWorkCenterInformation türündeki Instructions sütununa karşı belirli bir XQuery tarafından döndürülen XML için sütun adını, , belirtir. Bu nedenle, bir ManuWorkCenterInformation öğe öğesinin row alt öğesi olarak eklenir.
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;
Sonuç şu şekildedir:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
Sütun adı at işaretiyle (@) başlamıyor ve eğik çizgi işareti (/) içeriyor
Sütun adı @ işareti (@) ile başlamıyorsa ancak slash işareti (/) içeriyorsa, sütun adı bir XML hiyerarşisini gösterir. Örneğin, sütun adı "Ad1/Ad2/Ad3.../Adn" ise, her bir Adi, geçerli satır öğesinde iç içe yerleştirilmiş bir öğe adını temsil eder (örneğin, i = 1 için) veya Namei-1 adlı elemanın altında yer alır. Adn ile @başlıyorsa, adn-1 öğesinin özniteliğine eşlenir.
Örneğin, aşağıdaki sorgu, EmpName, First, ve Middle adlarını içeren karmaşık bir öğe Last olarak temsil edilen bir çalışan kimliği ve adı döndürür.
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;
Sütun adları, PATH modunda XML oluşturmada yol olarak kullanılır. Çalışan kimliği değerlerini içeren sütun adı '@' ile başlar. Bu nedenle, EmpIDöğesine bir özniteliği eklenir row . Diğer tüm sütunlar, sütun adında hiyerarşiyi gösteren bir eğik çizgi işareti (/) içerir. Sonuçta elde edilen XML, EmpName öğesinin altında row alt öğesine sahip olacak ve EmpName öğesi ise First, Middle ve Last alt öğelerine sahip olacaktır.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
Çalışanın ikinci adı null olur ve varsayılan olarak null değer, öğenin veya özniteliğin yokluğuyla eşleşir. NULL değerleri için öğelerin oluşturulmasını istiyorsanız, bu sorguda gösterildiği gibi XSINIL ile ELEMENTS yönergesini belirtebilirsiniz.
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;
Sonuç şu şekildedir:
<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>
Varsayılan olarak, PATH modu öğe merkezli XML oluşturur. Bu nedenle, PATH modu sorgusunda ELEMENTS yönergesini belirtmenin hiçbir etkisi yoktur. Ancak, önceki örnekte gösterildiği gibi ELEMENTS yönergesi, null değerler için öğeler oluşturmak için XSINIL ile kullanışlıdır.
Kimlik ve adın yanı sıra, aşağıdaki sorgu bir çalışanın adresini getirir. Adres sütunlarının adlarındaki yola göre, Address elemanı row elementi altında bir alt öğe olarak eklenir ve adres ayrıntıları Address elementi altında alt öğeler olarak eklenir.
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;
Sonuç şu şekildedir:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Birkaç sütun aynı yol ön ekini paylaşır
Sonraki birkaç sütun aynı yol ön ekini paylaşıyorsa, bunlar aynı ad altında birlikte gruplandırılır. Aynı ad alanına bağlı olsalar bile farklı ad alanı ön ekleri kullanılıyorsa, yol farklı kabul edilir. Önceki sorguda FirstName, MiddleNameve LastName sütunları aynı EmpName ön eki paylaşır. Bu nedenle, EmpName elementinin alt öğeleri olarak eklenirler. Önceki örnekte Address öğesini siz oluşturmaktayken de aynı durum söz konusuydu.
Bir sütunun adı farklı
Eğer adı farklı bir sütun görünürse, aşağıdaki değiştirilmiş sorguda gösterildiği gibi gruplandırmanın bozulmasına neden olur. Sorgu, önceki sorguda belirtildiği gibi FirstName, MiddleName ve LastName gruplandırmalarını, adres sütunlarını FirstName ve MiddleName sütunlarının arasına ekleyerek keser.
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;
Sonuç olarak, sorgu iki EmpName öğe oluşturur. İlk EmpName öğesi, FirstName alt öğesine sahiptir ve ikinci EmpName öğesi, MiddleName ve LastName alt öğelerine sahiptir.
Sonuç şu şekildedir:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>