User-Defined Functions(Kullanıcı Tanımlı Fonksiyonlar) SQL Server 2000 ile gelen bir özelliktir.
Bu yazımda ihtiyaçlar doğrultusunda kendinize ait raporlamaları aralıklı günlere göre yada istediğiniz değerlere göre ihtiyaçlarınızı karşılayabilirsiniz.
Başlıktanda anlaşıldığı gibi kullanıcıların ihtiyaçlarına göre kendilerine ait fonksiyonlarını oluşturabileceklerdir.
3 çeşit fonksiyon vardır.
-
Table-Valued Functions (Tablo Değerli Fonksiyonlar)
Viewlerle büyük benzerlikler içerir ancak farklı olarak dışarıdan parametre alabilirler.
belirli bir tarih aralığındaki verileri dondurmek istediğimizde ve büyük verileri sorgulamak istediğimizde kullanılır.
Örnek olarak
2 tarih arasındaki verileri döndürmek
CREATE FUNCTION dbo.fn_SalesBaslaBitisTarih (@startDate DATE, @endDate DATE) RETURNS TABLE AS RETURN ( SELECT * ----Yada istenilen kolonlar FROM Sales WHERE OrderDate BETWEEN @startDate AND @endDate --- ekstra koşul eklenebilir )
SELECT * FROM dbo.fn_ SalesBaslaBitisTarih ('2025-01-01', '2025-03-01')
Bu sorgu, 2025-01-01 ile 2025-03-01 arasındaki tüm verileri listeleyecektir.
-
Scalar Functions (Skalar Fonksiyonlar)
Skalar fonksiyonlar birden fazla satır üzerinde işlem yapmaz; her zaman tek bir değer döndürür.
Örnek olarak
Kullanıcı Adı Uzunluğu Hesaplamak istediğinizde
CREATE FUNCTION dbo.fn_UsernameLengt (@username NVARCHAR(100)) RETURNS INT AS BEGIN RETURN LEN(@username) END
Kullanımı:
SELECT dbo.fn_ UsernameLengt (FurkanK) AS UsernameLengt
Örnek 2
Doğum Tarihinden Yaş Hesaplamak
CREATE FUNCTION dbo.fn_yasHesapla (@birthDate DATE) RETURNS INT AS BEGIN RETURN DATEDIFF(YEAR, @birthDate, GETDATE()) END
SELECT dbo.fn_ yasHesapla ('1990-05-15') AS Yaşınız
-
Inline Table-Valued Functions (Satır İçi Tablo Değerli Fonksiyonlar)
bir SELECT sorgusu döndüren ve genellikle daha performanslı olan fonksiyonlardır.
Bunlar, tabloları döndürürken daha verimli çalışır çünkü sadece bir sorgu içerirler
Örnek olarak
Müşteri Id den Müşteri Kayıtlarını Döndürmek
CREATE FUNCTION dbo.fn_MusteriKayitlari (@MusteriId INT) RETURNS TABLE AS RETURN ( SELECT OrderID, OrderDate, TotalAmount FROM Orders WHERE MusteriId = @MusteriId )
SELECT * FROM dbo.fn_ MusteriKayitlari (1023)
0 Yorum