MSSQL Datasını Json Formatına Çevirme
Yeniden Merhabalar,
Uzun bir aradan sonra yeniden bir yazı ile karşınızdayım. Not defteri arşivime yavaş yavaş eklemeler yapıyorum. İstek görüş ve önerilerinizi yorum ile iletebilirsiniz. Bu Makalede Datayı Json formatına çevirmeyi anlatacağım. Aslında pek anlatılacak bir yanı yok bende stackoverflow üzerinden bulmuştum. Hazır fonksiyonu veritabanınıza ekliyorsunuz sonrasında ise kodlar sihrini göstermeye başlıyor 🙂
Öncelikle Json formatı almak istediğimiz veritabanında yeni bir sorgu penceresi açıp aşağıda ki kodları yapıştırıp çalıştırıyoruz.
/****** Object: UserDefinedFunction [dbo].[udf-Str-JSON] Script Date: 2.06.2020 16:17:45 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[udf-Str-JSON] (@IncludeHead int,@ToLowerCase int,@XML xml) Returns varchar(max) AS Begin Declare @Head varchar(max) = '',@JSON varchar(max) = '' ; with cteEAV as (Select RowNr=Row_Number() over (Order By (Select NULL)) ,Entity = xRow.value('@*[1]','varchar(100)') ,Attribute = xAtt.value('local-name(.)','varchar(100)') ,Value = xAtt.value('.','varchar(max)') From @XML.nodes('/row') As R(xRow) Cross Apply R.xRow.nodes('./@*') As A(xAtt) ) ,cteSum as (Select Records=count(Distinct Entity) ,Head = IIF(@IncludeHead=0,IIF(count(Distinct Entity)<=1,'[getResults]','[[getResults]]'),Concat('{"status":{"successful":"true","timestamp":"',Format(GetUTCDate(),'yyyy-MM-dd hh:mm:ss '),'GMT','","rows":"',count(Distinct Entity),'"},"results":[[getResults]]}') ) From cteEAV) ,cteBld as (Select * ,NewRow=IIF(Lag(Entity,1) over (Partition By Entity Order By (Select NULL))=Entity,'',',{') ,EndRow=IIF(Lead(Entity,1) over (Partition By Entity Order By (Select NULL))=Entity,',','}') ,JSON=Concat('"',IIF(@ToLowerCase=1,Lower(Attribute),Attribute),'":','"',Value,'"') From cteEAV ) Select @JSON = @JSON+NewRow+JSON+EndRow,@Head = Head From cteBld, cteSum Return Replace(@Head,'[getResults]',Stuff(@JSON,1,1,'')) End -- Parameter 1: @IncludeHead 1/0 -- Parameter 2: @ToLowerCase 1/0 (converts field name to lowercase -- Parameter 3: (Select * From ... for XML RAW) GO
Kullanımı Aslında çok kolay. İlk Parametre olarak Başlığın yüklenip yüklenmeyeceğini soruyor buraya 1 veya 0 yani Var veya yok değeri giriyoruz, sonrasında sütun isimlerini olduğu gibi mi yazayım yoksa hepsini küçük harfe mi çevireyim diye soruyor onun içinde aynı mantık ile 1 veya 0 yazıyoruz ve işin temeli bir tablo veriyoruz buraya, Fakat tablonun sonuna “for XML RAW” yazıyoruz ve bunu bir XML olarak kabul edip Json formatına çeviriyor. Örnek Kullanımı Aşağıda sizin ile paylaştım kendiniz de evinizde rahatlıkla deneyebilirsiniz. Kolay Gelsin.
SELECT Ogrenciler.*, [dbo].[udf-Str-JSON] (0,0, (SELECT * FROM OgrencilerinAldigiDersler WHERE OgrencilerinAldigiDersler.OgrenciID = Ogrenciler.ID FOR XML RAW)) FROM Ogrenciler
Klasik bir öğrenci örneği ile de yazıyı sonlandırıyorum. 🙂
Bir yanıt yazın