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)

Kaynak:
CREATE FUNCTION (Transact-SQL)