Função Escalar x Table Valued Function
Muito se fala na internet sobre como as funções escalares são terríveis e que devemos evitar o uso a todo o custo… Eu gostaria de mostrar o porquê: Vejam o seguinte script abaixo (um procedimento muito utilizado por aí: a utilização de uma função escalar que trata “N” casos e retorna o valor desejado). Primeiro, a criação da tabela e inserção dos dados: CREATE TABLE NotaFiscal (Cod int identity primary key, Pessoa varchar(20), Valor decimal (15,2), Data date) CREATE INDEX Ncl_NotaFiscal ON NotaFiscal (Data) INCLUDE (Pessoa, Valor) GO -- Inserindo 10 notas no período de 500 dias (5000 notas). INSERT INTO NotaFiscal SELECT 'Logan', 100, DATEADD(DD, Number, '2012-12-31') from Numbers WHERE Number < 500 GO 10 GO CREATE FUNCTION CalculaTributos (@Codigo int, @Tipo char(1)) Returns decimal(15,2) AS BEGIN DECLARE @valor decimal(15,2) SELECT @Valor = CASE @tipo WHEN 'a' then valor * 0.1 WHEN 'b' then valor * 0.3 WHEN 'c' then valor * 0.5 END FROM NotaFiscal RETURN @valor END; ...