sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte parametrizované VIEW v SQL Server 2008

Zkuste vytvořit funkci s inline tabulkou. Příklad:

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)

Pokud si prohlédnete plán provádění pro SELECT, neuvidíte vůbec zmínku o funkci a ve skutečnosti vám ukáže pouze dotazované základní tabulky. To je dobré, protože to znamená, že při generování plánu provádění pro dotaz budou použity statistiky základních tabulek.

To, čemu je třeba se vyhnout, by byla funkce oceňovaná tabulkou s více příkazy, protože základní statistiky tabulky nebudou použity a mohou mít za následek špatný výkon kvůli špatnému plánu provádění.
Příklad toho, co vyvarovat :

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

Jemně odlišné, ale s potenciálně velkými rozdíly ve výkonu, když je funkce použita v dotazu.



  1. Rozšířené události pro SSAS

  2. Výsledky SSMS do mřížky - CRLF není zachováno při kopírování/vkládání - nějaké lepší techniky?

  3. Seznam uložených funkcí, které odkazují na tabulku v PostgreSQL

  4. Co je MySQL:Přehled