Aracılığıyla paylaş


for xml ile ham modunu kullanın

Açıklandığı gibi xml (SQL Server), auto modunda döndürür sorgu sonuçları olarak iç içe xml öğelerinin. Bu sorgu sonucu oluşturulan xml şekli üzerinde çok denetimi sağlamıyor. auto modu sorguları, basit hiyerarşileri oluşturmak istiyorsanız kullanışlıdır. Ancak, Kullanımı ile for xml Açık moduve for xml ile ham modunu kullanındaha fazla kontrol ve sorgu sonuç xml şekli karar esnekliği sağlamak.

İçinden en az bir sütunu select yan tümcesinde listelenen from yan tümcesi, her masada bir xml öğesi olarak gösterilir. İsteğe bağlı öğeleri seçeneği for xml yan tümcesi belirtilirse, select yan tümcesinde listelenen sütunlar öznitelikleri veya alt öğeleri, eşleştirilir.

xml hiyerarşisinde yerleştirme sonuç XML öğeleri tabloları select yan tümcesinde belirtilen sütunlara göre tespit sırasına dayanır. Bu nedenle, hangi sütun adları select yan tümcesinde belirtilen sıra önemlidir. Tanımlanan ilk, en soldaki tablo, sonuç xml belgesinde üst öğesi oluşturur. Sütunların select deyiminde tanımlanan ikinci en soldaki tablo, bir alt öğesi içinde en üst öğesi vb. oluşturur.

select yan tümcesinde listelenen sütun adı zaten önceden belirtilen sütun select yan tümcesi tarafından tanımlanan tablo ise, sütun özniteliği zaten oluşturduysanız, yeni bir hiyerarşi düzeyi açmak yerine öğesi olarak eklenir. Öğeleri seçeneği belirtilirse, sütun öznitelik olarak eklenir.

Örneğin, bu sorguyu yürütmek:

SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO

Bu kısmi bir sonucudur:

<Cust CustomerID="1" CustomerType="S">
  <OrderHeader CustomerID="1" SalesOrderID="43860" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="44501" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="45283" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="46042" Status="5" />
</Cust>
...

select yan tümcesi aşağıdakileri unutmayın:

  • MüşteriNo Müşteri tablosuna başvurur. Bu nedenle, bir <Cust> öğesi oluşturulur ve CustomerID olarak kendi özniteliği eklenir.

  • İleri, üç sütun, OrderHeader.CustomerID, OrderHeader.SaleOrderID ve OrderHeader.Status, OrderHeaderWHERE tablo başvurusu. Bu nedenle, bir <OrderHeader> öğesi bir alt öğesi eklenir <Cust> eleman ve üç sütun öznitelikleri eklenen <OrderHeader>.

  • Ardından, Cust.CustomerTypeFROM sütunu yeniden Cust tablo zaten Cust.CustomerID sütun tarafından tanımlanan başvurur. Bu nedenle, yeni bir öğe oluşturulur. Bunun yerine, döndürürCustomerType özniteliği eklenir <Cust> daha önce oluşturulan öğesi.

  • Sorgu, tablo adları için diğer adlar belirtir. Bu adlar, karşılık gelen öğe adları olarak görünmektedir.

  • order by grup altında bir veli bütün çocuklar için gereklidir.

select yan tümcesi önce Müşteri tablosundaki sütunlar OrderHeaderWHERE tablosundaki sütunlar belirtir dışında bu sorguyu önceki bir benzer. Bu nedenle, ilk <OrderHeader> öğesi oluşturulur ve sonra <Cust> alt öğe için eklenir.

select OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerID, 
       Cust.CustomerType
from Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
where Cust.CustomerID = OrderHeader.CustomerID
for xml auto

Bu kısmi bir sonucudur:

<OrderHeader CustomerID="1" SalesOrderID="43860" Status="5">
  <Cust CustomerID="1" CustomerType="S" />
</OrderHeader>
...

Öğeleri seçeneği for xml yan tümcesinde eklediyseniz, öğe merkezli bir xml döndürülür.

SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO, ELEMENTS

Bu kısmi bir sonucudur:

<Cust>
  <CustomerID>1</CustomerID>
  <CustomerType>S</CustomerType>
  <OrderHeader>
    <CustomerID>1</CustomerID>
    <SalesOrderID>43860</SalesOrderID>
    <Status>5</Status>
  </OrderHeader>
   ...
</Cust>
...

Bu sorgu, oluşturmanın yanında, bir satırdan CustomerID değerleri karşılaştırılır <Cust> öğelerini MüşteriNo tablonun birincil anahtarı olduğundan. CustomerID tablo için birincil anahtar olarak tanımlanan değil, tüm sütun değerleri (MüşteriNo, döndürürCustomerType bu sorgu) bir satırdan sonraki karşılaştırılır. Değerleri farklıysa, yeni bir <Cust> xml öğesi eklenir.

Karşılaştırılmak üzere sütun türü varsa bu sütun değerleri karşılaştırılırken metin, ntext, Resim, veya xml, xml değerleri değil karşılaştırıldığında ve farklı olduğunu varsayar düz-se bile onlar-ebilmek var olmak aynı. Bunun nedeni, büyük nesnelerin karşılaştırılması desteklenmiyor. Öğeleri seçili her satır için sonuç eklenir. Not Bu sütun (n)varchar(max) ve varbinary(max) karşılaştırılır.

select yan sütunda herhangi bir toplama sütunu veya hesaplanmış bir sütun durumunda gibi from yan tümcesinde tanımlanan tabloları ile ilişkili olamaz listede karşılaşıldığında sütun xml belgesinde yerde derin iç içelik seviyesi eklenir. Böyle bir sütunu ilk sütun olarak select yan tümcesinde görünür sütun üst öğesine eklenir.

select yan tümcesinde yıldız(*) joker karakter belirtilirse, iç içe aynı şekilde yukarıda açıklanan, satırlar sorgu altyapısı tarafından döndürülen siparişi temel alınarak belirlenir.

Bu Bölümde

Aşağıdaki konular, auto modu hakkında daha fazla bilgi sağlar:

Ayrıca bkz.

Başvuru

select (Transact-sql)

xml (SQL Server)