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

Creare VIEW con parametri in SQL Server 2008

Prova a creare una funzione inline con valori di tabella. Esempio:

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)

Se visualizzi il piano di esecuzione per SELECT non vedrai affatto una menzione della funzione e in realtà ti mostrerai solo le tabelle sottostanti che vengono interrogate. Questo è positivo in quanto significa che le statistiche sulle tabelle sottostanti verranno utilizzate durante la generazione di un piano di esecuzione per la query.

La cosa da evitare sarebbe una funzione valutata in una tabella con più istruzioni poiché le statistiche della tabella sottostante non verranno utilizzate e possono comportare scarse prestazioni a causa di un piano di esecuzione scadente.
Esempio di cosa evitare :

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

Sottilmente diverso, ma con differenze potenzialmente notevoli nelle prestazioni quando la funzione viene utilizzata in una query.