No SQL Server, as funções são uma maneira poderosa de encapsular lógicas e operações reutilizáveis. Entre elas, a Função com Valor de Tabela (Inline) ou Inline Table-Valued Function (iTVF) é uma das opções mais eficientes para retornar conjuntos de resultados como se fossem uma tabela. Neste post, vamos explicar o que é uma função com valor de tabela inline, suas vantagens, e como utilizá-la em seus projetos.

O que é uma função com valor de tabela Inline?

Uma função com valor de tabela inline é uma função no SQL Server que retorna um conjunto de resultados (tabela) baseado em uma única consulta SQL. Diferente das funções com valor de tabela multi-statement, as iTVFs são definidas apenas por uma única instrução SELECT, o que as torna mais simples e geralmente mais rápidas em termos de desempenho.

Características principais:

  • Retorna uma tabela: Os resultados da função podem ser tratados como uma tabela, permitindo que sejam usados em consultas SELECT, JOIN, etc;

  • Eficiência: Por ser inline (apenas uma instrução), a iTVF é otimizada de forma semelhante a uma view, o que tende a oferecer melhor desempenho do que funções multi-statement;

  • Parâmetros de entrada: Aceita parâmetros que podem ser utilizados na consulta interna para filtrar ou ajustar os resultados.

Sintaxe de uma função com valor de tabela Inline

A criação de uma função com valor de tabela inline é simples e segue a seguinte sintaxe básica:

CREATE FUNCTION NomeDaFuncao(@Parametro Tipo)
RETURNS TABLE
AS
RETURN (
    SELECT Colunas
    FROM Tabela
    WHERE Condicao = @Parametro
);

Explicação:

  • CREATE FUNCTION: Comando para criar a função.
  • @Parametro: Parâmetro(s) de entrada da função (opcional).
  • RETURNS TABLE: Indica que a função retornará uma tabela.
  • RETURN: Dentro desse bloco é definida a consulta SELECT que irá gerar os resultados da função.

Exemplo prático de função com valor de tabela Inline

Vamos ver um exemplo prático para entender como criar e utilizar uma iTVF.

Exemplo: Função que retorna todos os funcionários de um determinado departamento:

CREATE FUNCTION FuncionariosPorDepartamento(@DepartamentoID INT)
RETURNS TABLE
AS
RETURN (
    SELECT FuncionarioID, Nome, DepartamentoID
    FROM Funcionarios
    WHERE DepartamentoID = @DepartamentoID
);

Explicação:

  • Função: FuncionariosPorDepartamento é uma função que aceita um parâmetro @DepartamentoID;

  • Consulta interna: A função realiza um SELECT na tabela Funcionarios e retorna todos os funcionários pertencentes ao departamento fornecido como parâmetro.

Usando a função em uma consulta

Agora que criamos a função, podemos utilizá-la em nossas consultas da mesma forma que utilizamos uma tabela:

SELECT * 
FROM FuncionariosPorDepartamento(3);

Isso retorna todos os funcionários cujo DepartamentoID seja 3. A função age como se fosse uma tabela, facilitando a reutilização e melhorando a legibilidade do código.

Vantagens das funções com valor de tabela Inline

As iTVFs trazem várias vantagens quando comparadas a outras abordagens no SQL Server, como views ou funções multi-statement:

  1. Desempenho otimizado:

    • Como o SQL Server otimiza uma função inline de forma semelhante a uma view, o plano de execução gerado é mais eficiente, o que reduz a carga de processamento e melhora o desempenho, especialmente em grandes consultas.

  2. Reuso de Código:

    • Funções com valor de tabela podem encapsular lógica reutilizável em diversas partes do sistema. Isso reduz redundância e melhora a manutenção do código.

  3. Flexibilidade:

    • Ao permitir a passagem de parâmetros, as iTVFs oferecem mais flexibilidade em relação às views, que não aceitam parâmetros.

  4. Compatibilidade com Consultas Complexas:

    • Você pode usar uma iTVF em junções complexas, subconsultas ou em CROSS APPLY, aumentando a capacidade de modelagem de dados sem duplicar consultas.

Diferença entre função Inline e Multi-Statement

Embora ambas as funções retornem tabelas, existem diferenças importantes:

CaracterísticaInline (iTVF)Multi-Statement (mTVF)
DefiniçãoApenas uma consulta SELECTPode ter várias declarações INSERT, UPDATE, etc.
DesempenhoMais rápido e otimizadoMais lento, pois cria uma tabela temporária internamente
ArmazenamentoNão cria uma tabela temporáriaCria uma tabela temporária para armazenar resultados
Uso típicoConsultas simplesConsultas complexas com lógica condicional

Como usar funções Inline em consultas avançadas

As funções com valor de tabela inline podem ser combinadas com outras funcionalidades avançadas do SQL Server, como JOIN e CROSS APPLY, para criar consultas ainda mais poderosas.

Exemplo com JOIN:

Você pode usar uma iTVF em conjunto com outras tabelas em uma junção, assim como faria com uma tabela normal:

SELECT F.FuncionarioID, F.Nome, D.Nome AS NomeDepartamento
FROM FuncionariosPorDepartamento(3) F
JOIN Departamentos D ON F.DepartamentoID = D.DepartamentoID;

Exemplo com CROSS APPLY:

O CROSS APPLY permite usar funções com valor de tabela inline em cada linha de uma tabela base. Isso é útil quando você precisa aplicar a função de forma dinâmica.

SELECT D.Nome AS NomeDepartamento, F.Nome AS Funcionario
FROM Departamentos D
CROSS APPLY FuncionariosPorDepartamento(D.DepartamentoID) F;

Outro exemplo prático

CREATE FUNCTION retorna_alunos(@nota1 REAL)//função recebe parâmetro do tipo REAL
    RETURNS Table // retorna uma tabela
    AS
    RETURN( // retornará o que a instrução SELECT ordenar
    	SELECT nome, nota1 FROM notas_alunos
        WHERE nota1 > @nota1) // filtro

Para chamar a função basta digitar:

SELECT nome, nota1
    FROM retorna_alunos(5) // retorna alunos que tiver a primeira nota maior que 5

A consulta acima retornará os alunos (e suas primeiras notas) que tiver a primeira nota maior que 5 .

As funções com valor de tabela inline são uma ferramenta versátil e poderosa no SQL Server, permitindo que você encapsule e reutilize consultas SQL de maneira eficiente.

Elas são especialmente úteis quando você precisa de uma solução rápida, reutilizável e com bom desempenho para retornar conjuntos de resultados de forma dinâmica. Use-as quando precisar de uma função simples que retorne resultados baseados em parâmetros e que possa ser facilmente integrada em consultas complexas.

APRENDA BANCO DE DADOS SQL DO BÁSICO AO AVANÇADO!

Domine os principais comandos, Operadores, Manipulação de dados, Funções, Drop e Uploads, Query, SubQuerys, Views, Segurança e muito mais!

O acesso ao nosso curso é vitalício e com suporte exclusivo.

CLIQUE NA IMAGEM ABAIXO PARA MAIS DETALHES:

linux dicas e truques

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 
https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *