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 consultaSELECT
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 tabelaFuncionarios
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:
- 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.
- 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.
- 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.
- 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.
- Flexibilidade:
- Ao permitir a passagem de parâmetros, as iTVFs oferecem mais flexibilidade em relação às views, que não aceitam parâmetros.
- Ao permitir a passagem de parâmetros, as iTVFs oferecem mais flexibilidade em relação às views, que não aceitam parâmetros.
- 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.
- Você pode usar uma iTVF em junções complexas, subconsultas ou em
Diferença entre função Inline e Multi-Statement
Embora ambas as funções retornem tabelas, existem diferenças importantes:
Característica | Inline (iTVF) | Multi-Statement (mTVF) |
---|---|---|
Definição | Apenas uma consulta SELECT | Pode ter várias declarações INSERT , UPDATE , etc. |
Desempenho | Mais rápido e otimizado | Mais lento, pois cria uma tabela temporária internamente |
Armazenamento | Não cria uma tabela temporária | Cria uma tabela temporária para armazenar resultados |
Uso típico | Consultas simples | Consultas 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.
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:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários