MsSql Tabloyu JSON Datasına Çevirme
Merhabalar, başlıkta da belirtmiş olduğum gibi MsSql veritabanında ki bir tabloyu json datasına çevirmemiz mümkün. Normalde bu işlemi kod tarafında yapmanızda mümkün fakat öyle zamanlar gelirki tablonuzun içerisine bir tablo daha gömmeniz gerekir ama bunu performanslı bir şekilde yapamazsınız. Sizinle paylaşacağım bu kodun yaptığı işi aslında MsSql Server Management 2017 gibi versiyonlarda var olduğunu gördüm ama test etmedim, eski sürüm kullanan arkadaşara yardımcı olması için kodu ve nasıl kullanılacağını hızlıca anlatacağım.
CREATE FUNCTION [dbo].[fthbs-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 -- Parametre 1: @IncludeHead 1/0 (Başlığın eklenmesi için 1, eklenmemesi için 0) -- Parametre 2: @ToLowerCase 1/0 (başlıkların küçük harflerle yazmasını istiyorsanız 1 yazın) -- Parametre 3: (Select * From ... for XML RAW)
Burada dikkat edilmesi gereken konu 3. Parametrede dikkat ederseniz en sonda “for XML RAW” var. Aslında çekmek istediğimiz tablo öncelikle Sql Tarafından XML formatına dönüştürülüyor, daha sonra da biz o datayı JSON formatına çeviriyoruz. Kullanım şeklini de aşağıda sizlerle paylaşıyorum.
SELECT [dbo].[fthbs-Str-JSON](0, 1, (SELECT * FROM ogrenciler for XML RAW))
Artık MsSql içerisinde bir tabloyu direkt olarak json formatında alabilirsiniz, kod tarafında size dönen değer ilk satırın ilk sütununda yer alacaktır. Böylelikle tablonuzu diğer platformlar ile paylaşırken global kullanımı rağbet görmüş JSON formatını kolaylıkla kullanabilirsiniz.
İşinizi Görmesi dileği ile …
Bir yanıt yazın