makaleler / Veritabanı / MSSQL Stored Procedure json parametre gonderimi

MSSQL Stored Procedure json parametre gonderimi

12.10.2018 08:05:26

MSSQL Strored Procedure json parametre nasıl kullanılır?

Merhabalar Arkadaşlar, (Not:Lütfen öneri ve sorularınızı yorum olarak atınız. Teşekkürler şimdiden)


Makalelerime baktığımda uzun zamandır makale yazmadığımı farkettim. Bugün sizlerin karşısına MsSql Veritabanı'nda json veri göndererek Stored Procedure'de onu parametre olarak kullanma örneğiyle çıkmaktayım.


Stored Procedure, uygulama geliştirirken çeşitli faydaları bulunmaktadır. Bu faydaları gerekirse başka bir makalede detaylandırabiliriz. Şuan sadece konumuzla ilgili olan kısmından bahsedeyim. Stored Procedure, exe'yi güncellemeden revize yapmamıza olanak sağlamaktadır.


Winform yada webform tarafında combobox(çoklu seçim) gibi farklı olasılık componentler ile SP'ye çoklu parametre göndermek durumunda kalabiliriz.Bunu parametre'ye gönderirken araya bir karakter koyup, sql tarafında fn_split fonksiyonu ile split ederek yapabiliriz. Ama burada bir dezavantaj bulunmaktadır. Bu şekilde temp bellek sınırımız bulunmakta ve belirli bir veri buyuklugunden sonraki verileri parametre olarak gonderemiyo olacağız. Bir de katmanlı yapıda uygulama geliştiriyorsak xml yada json şeklinde parametre göndermemiz daha doğru olacaktır.


Bu aşamada benim sizlere sunduğum örnek fayda sağlayacaktır. Önce örneğimi paylaşıp sonrasında açıklamaya çalışacağım.



DECLARE @json NVARCHAR(max)
SELECT @json = N'{"ProductList":
[  
   {  
      "UrunId":202680
   },
   {  
      "UrunId":203015
   }
]'
select DISTINCT u.(Degisken),u.UrunId,ug.(Degisken),ug.(Degisken),bg.(Degisken)as DegiskenAdi, bg.(Degisken), bg.(Degisken)
from (Sema).dbo.tb_U1 u(nolock)
inner join (Sema).dbo.tb_UG2 ug(nolock) on ug.Kod = u.Kod
inner join (Sema).dbo.Vw_BG3 bg(nolock) on bg.Grup = ug.Grup and bg.Urun = ug.Urun
where u.UrunID IN (SELECT p.UrunId FROM OPENJSON(@json, '$.ProductList') WITH (UrunId INT)  as p)

Yukarıda direk "Degisken" yerlerine gercek tablolarınızı yazarak MsSql de test edebilirsiniz. Bunun C# tarafında kodu da aşağıdaki gibidir.



 using (var ctx = new SqlContext())
            {
                var result = await ctx.Query<Country2Detail>("COM.sp_***_Get", new {ProductList= ProductList
                   }, CommandType.StoredProcedure);
                return result;
            }

Kolay gelsin.

yazar okanyurt

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda