Versuchen Sie, eine Inline-Tabellenwertfunktion zu erstellen. Beispiel:
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)
Wenn Sie den Ausführungsplan für SELECT anzeigen, sehen Sie überhaupt keine Erwähnung der Funktion und zeigen Ihnen tatsächlich nur die zugrunde liegenden Tabellen, die abgefragt werden. Dies ist gut, da beim Generieren eines Ausführungsplans für die Abfrage Statistiken zu den zugrunde liegenden Tabellen verwendet werden.
Was Sie vermeiden sollten, wäre eine Tabellenwertfunktion mit mehreren Anweisungen, da die zugrunde liegenden Tabellenstatistiken nicht verwendet werden und aufgrund eines schlechten Ausführungsplans zu einer schlechten Leistung führen können.
Beispiel dafür, was Sie vermeiden sollten :
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
Etwas anders, aber mit möglicherweise großen Leistungsunterschieden, wenn die Funktion in einer Abfrage verwendet wird.