Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Créer une vue paramétrée dans SQL Server 2008

Essayez de créer une fonction table en ligne. Exemple :

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)

Si vous affichez le plan d'exécution pour le SELECT, vous ne verrez aucune mention de la fonction et vous montrerez en fait simplement les tables sous-jacentes interrogées. C'est une bonne chose car cela signifie que les statistiques sur les tables sous-jacentes seront utilisées lors de la génération d'un plan d'exécution pour la requête.

La chose à éviter serait une fonction de table à plusieurs instructions, car les statistiques de table sous-jacentes ne seront pas utilisées et peuvent entraîner de mauvaises performances en raison d'un mauvais plan d'exécution.
Exemple de ce qu'il faut éviter :

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

Subtilement différent, mais avec des différences de performances potentiellement importantes lorsque la fonction est utilisée dans une requête.