Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Criar VIEW parametrizada no SQL Server 2008


Tente criar uma função com valor de tabela embutida. Exemplo:
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 você visualizar o plano de execução do SELECT, não verá nenhuma menção à função e, na verdade, apenas mostrará as tabelas subjacentes que estão sendo consultadas. Isso é bom, pois significa que as estatísticas nas tabelas subjacentes serão usadas ao gerar um plano de execução para a consulta.

A única coisa a evitar seria uma função com valor de tabela de várias instruções, pois as estatísticas de tabela subjacentes não serão usadas e podem resultar em desempenho ruim devido a um plano de execução ruim.
Exemplo do que evitar :
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

Sutilmente diferente, mas com diferenças potencialmente grandes no desempenho quando a função é usada em uma consulta.