Alper ÇELİK

Bilgisayar Mühendisi

T-Sql sorgusu ile dönen sonucu XML formatına çevirme

Bugüne kadar XML'in, bağımsız bir kuruluş olan W3C konsorsiyumu(bir kısmı gönüllü bir kısmı ise ücretli çalışır) tarafından tanımlanmış bir veri işleme dili olduğunu ve ortak bir standart haline geldiğini bir yerlerden okumuş ya da duymuşsunuzdur. Konuyu uzatmak pahasına; MS.Net in doğum tarihi XML'in doğum tarihi ile hemen hemen aynı olduğundan XML çoğu zaman M.S nin bir ürünüymüş gibi ilişkilendirilir.  
 
Daha fazla dağılmadan esas konumuza dönecek olursak; siz bir T-SQL sorgusu yazdığınızda standart çalışma hali esasen şu şekilde olacaktır:   
 
SELECT ALL FirstName, MiddleName FROM Person.Person FOR BROWSE
 
Ben ise size bu makaleye bahse konu olan, tablonuza ait verilerinizi XML'e nasıl dönüştüreceğinizi göstereceğim. O halde tümevarım yöntemi ile aşama aşama sorgularımızı ve etkilerini örnekler üzerinde görelim. İlk sorgumuz en basit haliyle şu şekilde olacaktır:
 
SELECT ProductID, Name, ProductNumber, Color, Size
FROM Production.Product FOR XML PATH
 
Bakınız Resim-1.
 
Sonuç kümesine tıkladığımızda alacağımız çıktı aşağıdaki örnek resim gibi olacaktır:
 
Bakınız Resim-2.  
 
Gördüğünüz gibi her satır için XML element oluşuyor. Ben örnek olması hasebiyle belirli sayıda örnek veri seti aldım. Bunun üzerinden konuşacak olursak, dikkat edilirse Size ve Color alanlarıma dair herhangi bir veri üretilmedi, çünkü o alanlar NULL değere sahip..
Bir sonraki sorgumuzu bunun üzerine bina ediyoruz:  
  
SELECT ProductID, Name, ProductNumber, Color, Size
FROM Production.Product FOR XML PATH ('Ürün')  
 
Bakınız Resim-3.
 
Çıktı sonucundan da anlaşılacağı üzere her bir satır için bir root kök elementi üretildi.
Not: Bu örnek özelinde; şayet tırnak içlerine herhangi bir isim yazmazsanız sorgu sonucunda satır bazlı kapsayan bir root elementi ile karşılaşmazsınız. Burda seçim size kalmış tabiki.
Örneğin: FOR XML PATH('') gibi..
Örnek uygulamalarımıza devam ediyoruz:
 
SELECT ProductID, Name, ProductNumber, Color, Size
FROM Production.Product FOR XML PATH('Ürün'), ROOT('Ürünler')
 
Bakınız Resim-4.  
 
Bu kez root elementi XML'ide içine alacak şekilde bir sonuç kümesi getirdi bize. Bu ifadeye anlamlı bir değer vermek için tablo isminden esinlenip 'Ürünler' adını verebiliriz.
 
Şimdi örnek uygulama formatımızın biraz dışına çıkıp şu örneğe bakalım:  
 
SELECT FirstName "@Firstname",
              LastName "@Lastname",
              s.Bonus "Sales/Bonus",
              s.SalesYTD "Sales/YTD"
FROM Person.Person p inner join Sales.SalesPerson s  
ON p.BusinessEntityID= s.BusinessEntityID
FOR XML PATH
 
Bakınız Resim-5.  
 
Burdaki yazım şeklinde ise elementleri yan yana veya alt alta sıralayıp bu elementlere ait attribute'ların gösterim şekline sorgudaki gibi müdahale etme şansımız oluyor.
T-Sql sorgularının XML'e dönüşüm hikayesini burada sonlandırıyorum ve farklı XML dönüşüm kodlarını sizlerle paylaşıyorum. Bu örnekleri sizin'de çalıştırıp çıkan sonucu gözlemlemeniz faydalı olacaktır.
 
SELECT * FROM Production.Product FOR XML RAW
SELECT* FROM Production.Product FOR XML RAW('Ürün')
SELECT* FROM Production.Product FOR XML RAW('Ürün'), ELEMENTS
SELECT* FROM Production.Product FOR XML RAW('Ürün'), ELEMENTS XSINIL
SELECT* FROM Person.Person FOR XML RAW  
 
 
Not: Örnek uygulamalarda AdventureWorks2012 veritabanı kullanılmıştır.

Trigger Serisinin İlk Bölümüne Buradan Ulaşabilirsin

Trigger'lar özelleşmiş bir tür stored prosedürlerdir(SP).