sql >> Database teknologi >  >> RDS >> Sqlserver

Opret parameteriseret VIEW i SQL Server 2008

Prøv at oprette en indlejret tabelværdi-funktion. Eksempel:

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)

Hvis du ser udførelsesplanen for SELECT, vil du slet ikke se en omtale af funktionen og vil faktisk kun vise dig de underliggende tabeller, der forespørges. Dette er godt, da det betyder, at statistik på de underliggende tabeller vil blive brugt, når der genereres en eksekveringsplan for forespørgslen.

Det, man bør undgå, er en funktion med flere sætninger, da den underliggende tabelstatistik ikke vil blive brugt og kan resultere i dårlig ydeevne på grund af en dårlig eksekveringsplan.
Eksempel på, hvad man skal undgå :

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

Subtilt anderledes, men med potentielt store forskelle i ydeevne, når funktionen bruges i en forespørgsel.



  1. Hurtigste måde at liste alle databaser i SQL Server ved hjælp af T-SQL

  2. MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET

  3. Bindestreger i kolonnenavne i MySQL DB

  4. Opret en skemabundet UDF i SQL Server