Eu tenho uma grande variável de tipo de tabela definida pelo usuário que possui 129 colunas. Armazenarei em torno de 2000-3000 registros nessa variável de tabela por vez e passarei para vários procedimentos e funções armazenados para obter dados adicionais e fazer modificações. Esses dados adicionais e novas modificações serão armazenados em uma nova variável de tabela do mesmo tipo e retornados ao procedimento armazenado de origem por meio de um OUTPUT
parâmetro. (Isso ocorre porque um parâmetro de tipo de tabela só pode ser passado como READONLY
.)
Este é o meu pseudo-código:
SP1
@tmp tableType
{
INSERT @tmp EXEC
SP2 (@tmp)
INSERT @tmp EXEC
SP3 (@tmp)
}
Devo usar um @table_variable
ou #temp_table
?
sql-server
sql-server-2008
performance
Sreekumar P
fonte
fonte
Respostas:
Existem dois blogs que você deve consultar. O primeiro ( aqui ) é uma comparação de variáveis de tabela e tabelas temporárias. É de 2008 e permanece relevante para o SQL Server 2008 R2.
A segunda entrada do blog ( aqui ) trata de alguns dos conceitos errados (concepções perdidas) sobre variáveis de tabela; incluindo a indexação de uma variável de tabela.
Ambas as entradas do blog, artigos, são escritas por Gail Shaw.
Acredito que o único item que você está procurando é que uma variável de tabela não pode ser transmitida entre procedimentos armazenados enquanto uma tabela temporária pode ser transmitida entre procedimentos armazenados. O mais próximo que uma variável de tabela chega da passagem entre procedimentos armazenados é como um tipo de tabela definido pelo usuário.
Passar uma variável de tabela como TVP para um procedimento armazenado tem o requisito de que deve ser definido como um parâmetro READ-ONLY. Isso implica que haverá várias cópias da variável de tabela se você desejar retornar uma cópia modificada dela.
No total, a passagem entre o procedimento armazenado pode ser melhor atendida por uma Tabela Temp quando você deseja retornar a estrutura passada com valores atualizados.
fonte
Nada melhor do que tentar os dois, mas acho que #tempTables tem um desempenho melhor depois que você entra nas centenas de registros.
fonte