Bildiğiniz gibi import işlemini kullanmadan herhagi bir excel dosyasındaki verileri okuyabilir ve istediğiniz tabloya yazabilirsiniz. Ancak günümüzde datalar xml dosyalarla harekete etmeye başladı ki Microsoft ‘ta SQL2005 ile tablolardan xml sonuç döndüren select cümlelerine yer verdi. Artık tek bir select cümlesiyle bir tabloyu xml haline getirebiliyoruz. Dolayısıyla xml bir dosyadan veritabanına veri alamız gereken durumlar olabiliyor.

Burada bir örnekle xml bir dosyadan nasıl veri okuyacağımızı inceleyeceğiz. Ben bu konu için daha anlaşılır ve bilinen bir xml dosya seçtim Netsisin parametre dosyası. Şimdi bu dosyadan banka ile ilgili olan özel bir parametreyi okuyalım;

 

DECLARE @idoc int

DECLARE @doc xml

DECLARE @TEMPSQL NVARCHAR(2000)

DECLARE @DOCPATH NVARCHAR(2000)

 set @DOCPATH = ‘C:\param.xml’

 SET @TEMPSQL = ‘SET @doc = (SELECT * FROM OPENROWSET(bulk ”’ + @DOCPATH + ”’,single_blob) as doc)’

 EXEC SP_EXECUTESQL @TEMPSQL, N’@doc xml OUTPUT’,
@doc = @doc OUTPUT 

 EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

 SELECT    * FROM      OPENXML (@idoc, ‘/ParametreBilgileri/OzelParametreler/PRGOZELPRM/Kayit_1′,2)
WITH (GRUPKOD  varchar(20),
  ANAHTAR varchar(20)) WHERE GRUPKOD=‘BANKA’

EXEC sp_xml_removedocument @idoc

 

Burada param.xml dosyasının yolu @DOCPATH değişkenine atanmıştır. Bu değişkenin kullanılmasındaki amaç ilgili yöntemin procedure çevrildiğinde parametre olarak xml dosyasının yolunun gönderilebilmesini amaçlamaktadır.

@TEMPSQL değişkenine atanan sql deyimi, dosya yolu verilen xml dosyasının SQL server üzrine bir rowset (veri satır kümesi) olarak alınamasını sağlamaktadır. Bu cümlede geçen BULK deyimi bir veri dosyasındaki verilerin veritabanı tablosu veya nonpartitinoted görünümü almasını sağlar. SINGLE_BLOB parametersi ise xml dosyadan alınan veriyi byte olarak okumak için kullanılmaktadır.

SP_EXECUTESQL procedure ile @TEMPSQL değişkenindeki SQL deyimi çalıştırılarak xml dosya içerisindeki veri @doc değişkenine akatrılmaktadır.

OPENXML fonksiyonu SP_XML_PREPAREDOCUMENT procedure’ü ile birlikte kullanılmaktadır. Bu prosedür, verilen xml içerisindeki düğümlerin ağaç şeklindeki görünümünü bellek üzerinde oluşturur ve bu çıktı OPENXML fonkiyonu için girdi olarak kullanılır.

OPENXML, bir XML belgesi için bize bir rowset görünümü sunarak, Sql Server’da XML verilerinin parse edilebilmesini sağlamaktadır. Parse sonrasında, bu verileri sql sorgularımızda kolaylıkla kullanmamız mümkündür. Özetle; XML içerisindeki verilerin tıpkı veritabanı tablolarındaki satırlar ve sütunlar gibi davranmasını sağlamış oluyoruz.

WITH deyimi ile xml dosyadan alacağımız veri kolonları belirtilmektedir.

SP_XML_REMOVEDOCUMENT procedure’ü ilede openxml input paremetresini bellekten siliyoruz.

Sonuç olarak XML bir dosyadan sanki bir SQL tablosuymuşcasına bir select çekilebilmekte ve kolayca bir SQL tablosuna import edilebilmektedir.

Umarım faydalı olur…