sql >> Database >  >> RDS >> Sqlserver

Maak een VIEW met parameters in SQL Server 2008

Probeer een inline functie met tabelwaarde te maken. Voorbeeld:

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)

Als u het uitvoeringsplan voor de SELECT bekijkt, ziet u helemaal geen vermelding van de functie en ziet u alleen de onderliggende tabellen die worden opgevraagd. Dit is goed omdat het betekent dat statistieken over de onderliggende tabellen worden gebruikt bij het genereren van een uitvoeringsplan voor de query.

Het ding dat u moet vermijden is een functie met meerdere verklaringen voor tabellen, aangezien onderliggende tabelstatistieken niet worden gebruikt en tot slechte prestaties kunnen leiden als gevolg van een slecht uitvoeringsplan.
Voorbeeld van wat u vermijdt :

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

Subtiel anders, maar met potentieel grote prestatieverschillen wanneer de functie in een query wordt gebruikt.



  1. Het analyseren van de dood door duizend vermindert de werkdruk

  2. Wat is het maximale aantal kolommen in een PostgreSQL-selectiequery?

  3. hoe een opgeslagen proc van helmknop te bellen en de refcursor te wijzigen die wordt geretourneerd?

  4. ADODFCMP-hulpprogramma