No SQL Server, a função com valor de tabela embutido é um dos dois tipos de funções com valor de tabela Transact-SQL (o outro tipo é a função com valor de tabela de várias instruções).
Funções com valor de tabela (TVF) são um tipo de função definida pelo usuário que retorna seus resultados como uma tabela. Eles podem, portanto, ser consultados como uma tabela normal.
TVFs embutidos (às vezes chamados de ITVFs) não possuem variáveis de retorno associadas. O valor de retorno é definido por meio de um único
SELECT demonstração. Esta instrução define a estrutura da tabela de retorno. Isso contrasta com os TVFs de várias instruções (também chamados de MSTVFs), que exigem uma variável de retorno. ITVFs também não usam o
BEGIN /END sintaxe, que é outra coisa que os distingue dos MSTVFs. Os TVFs inline geralmente são considerados como tendo melhor desempenho em relação aos TVFs de várias instruções, embora isso também dependa do que você está tentando fazer na função.
Exemplo de uma função com valor de tabela embutido
Aqui está um exemplo de um ITVF básico:
CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int)
RETURNS TABLE
AS
RETURN (
SELECT
al.ArtistId,
al.AlbumName,
g.Genre
FROM dbo.Albums al
INNER JOIN dbo.Artists ar
ON al.ArtistId = ar.ArtistId
INNER JOIN Genres g
ON al.GenreId = g.GenreId
WHERE al.ArtistId = @ArtistId
);
GO
Basicamente consiste em um
SELECT declaração encapsulada dentro de algum outro código. Para torná-lo especificamente um inline TVF, iniciei a função com RETURNS TABLE , seguido de perto por RETURN , e terminando com um SELECT declaração entre parênteses. Declarações múltiplas
Embora as funções com valor de tabela inline não sejam projetadas para vários
SELECT declarações (é para isso que servem os MSTVFs), é possível usar o UNION operador para combinar o conjunto de resultados de várias instruções. Exemplo:
CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70))
RETURNS TABLE
AS
RETURN (
SELECT
CONCAT('Cat', ' ', CatId) AS PetId,
CatName
FROM dbo.Cats
WHERE CatName = @PetName
UNION ALL
SELECT
CONCAT('Dog', ' ', DogId) AS PetId,
DogName
FROM dbo.Dogs
WHERE DogName = @PetName
);
GO
Opções de função
Você também pode especificar coisas como usar ou não a ligação de esquema (você provavelmente deveria) e se deve ou não criptografar a função.
A associação de esquema impedirá que quaisquer alterações adversas sejam feitas nos objetos subjacentes dos quais a função depende (como descartar uma tabela, alterar uma coluna etc.).
A criptografia converterá a definição da função em um formato ofuscado (para evitar que outras pessoas possam lê-la).
Consulte Criar uma função com valor de tabela embutida para obter exemplos de como adicionar associação de esquema e criptografia a um ITVF.