İ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.