Inline TVF’leri Kullanımı – Bölüm 36
Inline TVF, view’larla ortak birkaç özelliğe sahip bir tablo ifadesi biçimidir. View gibi, TVF de veri tabanında bir kalıcı nesne olarak saklanır. Bir view gibi tek bir SELECT ifadesi barındırır ve sorguya sonuç olarak bir sanal tablo döndürür. View ile inline TVF arasındaki en büyük fark, TVF input kabul eder ve bu input değerlerini barındırdığı SELECT ifadesinde kullanabilir.
Bu bölümde, inline TVF’lerin nasıl oluşturulacağını ve TVF’lerin sorgularda nasıl kullanıldığını öğreneceğiz.
Sorgularda Inline TVF Kullanmak
Inline TVF’lerin yapısı, türetilmiş tablolar ve CTE’ler ile mümkün olmayan yeniden kullanılabilirlik ve kodun merkezi olarak yönetilmesi avantajı sağlar.
View’lar ve inline TVF’ler arasındaki temel farklardan biri, TVF’ler input kabul edebilmektedir. Bu nedenle inline TVF’ler kavramsal olarak parametreli view gibi düşünülebilir ve input kullanılacağında view’ların yerine tercih edilebilir.
Basit Inline TVF’ler Oluşturmak
Sorguda inline TVF kullanabilmek için bu TVF’lerin veri tabanında gerekli izne sahip veri tabanı geliştiricisi veya yöneticisi tarafından oluşturulmaları gerekir. Veri tabanı güvenliğinin kapsamı bu bölümün kapsamı dışında olsa da, örnek veri tabanlarında TVF oluştururken izne gerek olmayacaktır.
Bir Inline TVF view’ı oluşturmak için:
- Opsiyonel olarak parametre sağlayarak tek bir SELECT ifadesini isimlendirip kaydetmek için T-SQL ifadesi olan CREATE FUNCTION ifadesini kullanın.
- Bu fonksiyonu TVF olarak tanımlamak için RETURNS TABLE ifadesini kullanın.
- Bu fonksiyonu bir inline fonksiyon haline getirmek için RETURN ifadesinden sonra SELECT ifadesini parantez içerisinde tanımlayın.
Aşağıdaki syntax’ı kullanabilirsiniz:,
CREATE FUNCTION <schema.name>
(@<parameter_name> AS <data_type>, ...)
RETURNS TABLE
AS
RETURN (<SELECT_expression>);
Aşağıda inline TVF oluştururken döndürülmek istenen kayıt sayısı için TOP operatörü kullanılmış ve input değeri verilmiştir:
CREATE FUNCTION Production.TopNProducts
(@t AS INT)
RETURNS TABLE
AS
RETURN
(SELECT TOP (@t) productid, productname, unitprice
FROM Production.Products
ORDER BY unitprice DESC);
Inline TVF’lerden Veri Çekmek
Bir inline TVF oluşturduktan sonra, view gibi sorgu içerisinde çağrılabilir. Argümanları parantez içine almanız gerekir. Birden çok argümanın ise virgülle ayrılması gerekir.
Inline TVF’e nasıl sorgu atılacağına ilişkin bir örnek:
SELECT * FROM Production.TopNProducts(3)
Dönen sonuç:
productid | productname | unitprice |
38 | Product QDOMO | 263.50 |
29 | Product VJXYN | 123.79 |
9 | Product AOZBW | 97.00 |
(3 row(s) affected)