15-09-2018, Saat: 19:54
(Son Düzenleme: 15-09-2018, Saat: 22:42, Düzenleyen: sabanakman.)
İ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.
Ö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.
CREATE TYPE TRaporTbl AS TABLE (Musteri nvarchar(50), Borc float, Alacak float) -->DROP TYPE TRaporTblOluş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
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=@RaporSorgu çalıştırıldığı zaman aşağıdaki gibi bir sonuç gelecektir.
Kod: (Select All)
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.