Ana içeriğe geç
Kesit SQL
İleri · T-SQL (SQL Server)

Kullanıcı tanımlı fonksiyonlar (UDF)

Skaler fonksiyonlar ve satır içi tablo değerli fonksiyonlar.

Uygulamada aç, 3 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

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ı yordamFonksiyon
SELECT içinde kullanımHayırEvet
Veri değiştirme (INSERT/UPDATE)EvetHayır
Transaction / TRY-CATCHEvetHayır
ÇıktıSonuç kümeleri, OUTPUT parametreleriTek değer veya tablo
Alıştırmalara geç (3)