Coba buat fungsi bernilai tabel sebaris. Contoh:
CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS TABLE
AS
RETURN
(
SELECT Field1, Field2
FROM SomeTable
WHERE Field3 = @Parameter1
)
-- Then call like this, just as if it's a table/view just with a parameter
SELECT * FROM dbo.fxnExample(1)
Jika Anda melihat rencana eksekusi untuk SELECT, Anda tidak akan melihat penyebutan fungsi sama sekali dan sebenarnya hanya akan menunjukkan kepada Anda tabel-tabel dasar yang ditanyakan. Ini bagus karena artinya statistik pada tabel yang mendasarinya akan digunakan saat membuat rencana eksekusi untuk kueri.
Hal yang harus dihindari adalah fungsi bernilai tabel multi-pernyataan karena statistik tabel yang mendasari tidak akan digunakan dan dapat mengakibatkan kinerja yang buruk karena rencana eksekusi yang buruk.
Contoh dari apa yang harus dihindari :
CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS @Results TABLE(Field1 VARCHAR(10), Field2 VARCHAR(10))
AS
BEGIN
INSERT @Results
SELECT Field1, Field2
FROM SomeTable
WHERE Field3 = @Parameter1
RETURN
END
Agak berbeda, tetapi dengan potensi perbedaan kinerja yang besar saat fungsi tersebut digunakan dalam kueri.