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’, EXEC sp_xml_preparedocument @idoc OUTPUT, @doc SELECT * FROM OPENXML (@idoc, ‘/ParametreBilgileri/OzelParametreler/PRGOZELPRM/Kayit_1′,2) 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…




#1 by bilgehan on Şubat 8, 2010 bilgehanCevap Yaz - 2:05 pm bilgehanCevap Yaz
Quote
çok güzel olmuş eline sağlık