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

SQL Server:funções com valor de tabela versus procedimentos armazenados


Uma função com valor de tabela inline (TVF) é como uma macro:é expandida para a consulta externa. Não tem plano como tal:o SQL chamador tem um plano.

Um TVF multi-declarações tem um plano (encontrará uma referência).

TVFs são úteis quando você deseja variar a lista SELECT para uma entrada parametrizada. Os TVFs inline são expandidos e a seleção externa/onde será considerada pelo otimizador. Para TVFs de várias instruções, a otimização não é realmente possível porque deve ser executada até a conclusão, então filtro.

Pessoalmente, eu usaria um proc armazenado em um TVF com várias instruções. Eles são mais flexíveis (por exemplo, dicas, podem mudar de estado, SET NOCOUNT ON, SET XACTABORT etc).

Não tenho objeção a TVFs embutidos, mas não costumo usá-los para código voltado para o cliente devido à incapacidade de usar SET e alterar o estado.