Skaler fonksiyon: tek değer döner
CREATE OR ALTER FUNCTION dbo.fn_NetTutar (@adet INT, @fiyat DECIMAL(12, 2), @indirim DECIMAL(4, 2))
RETURNS DECIMAL(12, 2)
AS
BEGIN
RETURN @adet * @fiyat * (1 - @indirim);
END;
GO
SELECT TOP 5 order_id, product_id,
dbo.fn_NetTutar(quantity, unit_price, discount) AS net
FROM order_items
ORDER BY net DESC;
PerformansSkaler fonksiyonlar her satır için ayrı çalışır ve eski sürümlerde sorgunun paralel çalışmasını engeller. SQL Server 2019'daki scalar UDF inlining bunu büyük ölçüde iyileştirdi; yine de çok büyük tablolarda ifadeyi doğrudan sorguya yazmak veya tablo değerli fonksiyon kullanmak daha hızlıdır.
Satır içi tablo değerli fonksiyon (inline TVF)
Parametre alan bir view gibidir; tek bir SELECT döndürür ve sorgu iyileştiricisi onu çağıran sorguya gömer.
CREATE OR ALTER FUNCTION dbo.fn_KategoriUrunleri (@kategori NVARCHAR(50))
RETURNS TABLE
AS
RETURN (
SELECT product_id, name, price
FROM products
WHERE category = @kategori
);
GO
SELECT * FROM dbo.fn_KategoriUrunleri(N'Spor') ORDER BY price DESC;
TVF'ler APPLY ile her satır için çağrılabilir: FROM kategoriler k CROSS APPLY dbo.fn_KategoriUrunleri(k.ad).
| Saklı yordam | Fonksiyon | |
|---|---|---|
| SELECT içinde kullanım | Hayır | Evet |
| Veri değiştirme (INSERT/UPDATE) | Evet | Hayır |
| Transaction / TRY-CATCH | Evet | Hayır |
| Çıktı | Sonuç kümeleri, OUTPUT parametreleri | Tek değer veya tablo |