Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine parametrisierte VIEW in SQL Server 2008

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.