SQL Server sp_executesql ile çalıştırılan sorguya tabloyu parametre olarak göndermek

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3009
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

SQL Server sp_executesql ile çalıştırılan sorguya tabloyu parametre olarak göndermek

Mesaj gönderen sabanakman » 15 Eyl 2018 06:48

İyi günler. SQL Server sistem prosedürlerinden olan sp_executesql ile dinamik string olarak oluşturulan sorguya değişkenler parametre olarak verilebilmektedir. Haliyle tablo tipli değişkenler için de aynı durum söz konusudur. Burada dikkat edilmesi gereken en önemli nokta parametre olarak verilecek tablonun tipi CREATE TYPE ... ile oluşturulmalıdır. Tablo tipli değişkenimizi oluşturduktan sonra iş artık normal değişkenlerin parametre olarak verildiği gibi yürütülcektir. Mesela örnek olması açısından aşağıdaki gibi bir tip oluşturalım.

Kod: Tümünü seç

CREATE TYPE TRaporTbl AS TABLE (Musteri nvarchar(50), Borc float, Alacak float)
-->DROP TYPE TRaporTbl
Oluşturduğumuz bu tipli bir tablo değişkeni tanımlayıp örnek kayıt girelim ve bu kayıtları (parametreye değişkenleri belirterek) sorgulayalım

Kod: Tümünü seç

declare @Rapor as TRaporTbl, @Sorgu nvarchar(max), @SinirdakiBorc float
set @SinirdakiBorc=50

insert into @Rapor (Musteri, Borc, Alacak) values ('Ali', 10, 20)
insert into @Rapor (Musteri, Borc, Alacak) values ('Veli', 50, 5), ('Mehmet', 120, 30)

set @Sorgu='
select * from (
  select Musteri, Borc, Alacak, isNull(Borc,0)-isNull(Alacak,0) as Bakiye from @tblRapor
) as tbl where Bakiye>@SinirdakiBorcMiktari'

execute sp_executesql @Sorgu, N'@SinirdakiBorcMiktari float, @tblRapor TRaporTbl READONLY', @SinirdakiBorcMiktari=@SinirdakiBorc, @tblRapor=@Rapor
Sorgu çalıştırıldığı zaman aşağıdaki gibi bir sonuç gelecektir.

Kod: Tümünü seç

Musteri	|	Borc	|	Alacak	|	Bakiye
------	|	----	|	------	|	------
Mehmet	|	120	|	30	|	90
Örneğe göre uyguladığımız yöntem pek uygun düşmeyebilir fakat konunun anlaşılması için basit bir örnektir bu. Zira bazı uygulamalarda karmaşık ilişkiler ve yöntemlerle elde edilen omurga bir tabloyu elde ettikten sonra şekilden şekile sokarak çok değişik raporlar elde edilebilmektedir. Bu yöntem saklı yordamlara ağırlık verenler için hayat kurtarıcı olabilmektedir. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .

Cevapla