sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa parametriserad vy i SQL Server 2008

Försök att skapa en inline-tabellvärderad funktion. Exempel:

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)

Om du tittar på exekveringsplanen för SELECT kommer du inte att se något omnämnande av funktionen alls och kommer faktiskt bara att visa dig de underliggande tabellerna som efterfrågas. Detta är bra eftersom det innebär att statistik på de underliggande tabellerna kommer att användas när en exekveringsplan för frågan genereras.

Det man bör undvika skulle vara en funktion som värderas med flera påståenden eftersom underliggande tabellstatistik inte kommer att användas och kan resultera i dålig prestanda på grund av en dålig utförandeplan.
Exempel på vad man ska undvika :

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 annorlunda, men med potentiellt stora skillnader i prestanda när funktionen används i en fråga.



  1. Är en vy snabbare än en enkel fråga?

  2. Hitta dubbletter av värden i MySQL

  3. Hur STRING_ESCAPE()-funktionen fungerar i SQL Server (T-SQL)

  4. Hur man returnerar dagnumret med ett suffix i MariaDB