SQL Server’da XML Uzantılı Url Adresinden Cross Apply Kullanarak Veri Çekme İşlemi

Herkese merhaba,

Bu yazıda SQL Server’da XML uzantılı url adresinden Cross Apply kullanarak veri çekme işlemiyle ilgili bilgi vereceğim.

Konu hakkında açık şekilde yazılmış Türkçe bir yazı ya da makale bulamadım. Ayrıca ingilizce kaynaklarda da sıkıntılar mevcuttu. Bu yüzden böyle bir makale yazmaya karar verdim. Konu alanındaki ilk Türkçe makaledir. Konunun çıkış noktası tamamen merak.

Elinizde XML içeren bir web url adresi olduğunu düşünelim. Böyle bir internet adresi üzerinden verileri nasıl çekebiliriz?

Aşağıdaki kodlamayı inceleyerek siz de kendi xml url linkiniz üzerinden sorgu işlemlerinizi gerçekleştirebilirsiniz.

İlk olarak aşağıdaki ayarları yapmalısınız.

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

Yukarıdaki ayarları SQL Serverınız üzerinde yaptıktan sonra aşağıdaki kodları çalıştırabilirsiniz.

--Temp tablo oluşturulması ve bu temp tabloya xml adresi olan url'den veri aktarma işlemi

IF OBJECT_ID('tempdb..#XMLTablosu') IS NOT NULL
    DROP TABLE #XMLTablosu;

CREATE TABLE #XMLTablosu
(
    XMLKolonu XML
);
GO

DECLARE @URL VARCHAR(8000);
SELECT @URL = 'https://www.w3schools.com/xml/note.xml'; --xml url adresi

DECLARE @Response VARCHAR(8000);
DECLARE @XML XML;
DECLARE @Obj INT;
DECLARE @Result INT;
DECLARE @HTTPStatus INT;
DECLARE @ErrorMsg VARCHAR(MAX);

EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT;

EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false;
EXEC @Result = sp_OAMethod @Obj,
                           'setRequestHeader',
                           NULL,
                           'Content-Type',
                           'application/x-www-form-urlencoded';
EXEC @Result = sp_OAMethod @Obj, send, NULL, '';
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT;

INSERT #XMLTablosu
(
    XMLKolonu
)
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'; --, @Response OUT 

--Tablonun kontrol edilmesi

SELECT *
FROM #XMLTablosu x;

--Cross Apply ile Tablonun Ayrıştırılması

SELECT
      pref.value('(to/text())[1]', 'varchar(50)') AS Kime,
      pref.value('(from/text())[1]', 'varchar(50)') AS Kimden,
	  pref.value('(heading/text())[1]', 'varchar(50)') AS Kimden,
	  pref.value('(body/text())[1]', 'varchar(50)') AS Kimden
FROM  
      #XMLTablosu CROSS APPLY
      XMLKolonu.nodes('/note') AS Mektup(pref)

Kodları çalıştırdığınızda aşağıdaki gibi bir sonuç göreceksiniz.

Görüldüğü üzere XML uzantılı url adresinden veri çekme işlemi Cross Apply kullanarak yapılmış oldu.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

SQL Server Eğitimleri Kanalına Abone Olun

Şunlar makaleler de hoşunuza gidebilir

Ads Blocker Image Powered by Code Help Pro
Reklam Eklentisi Kullanıyorsunuz

Lütfen bizlere destek için reklam eklentisi olmadan sitemizi ziyaret edin.

Şimdiden teşekkür ederiz.