Tenho uma pergunta sobre uma parte da documentação sobre tabelas temporárias que li recentemente no TechNet . O quarto parágrafo da seção Tabelas Temporárias nessa página tem a seguinte redação:
Se uma tabela temporária for criada com uma restrição nomeada e a tabela temporária for criada no escopo de uma transação definida pelo usuário, apenas um usuário por vez poderá executar a instrução que cria a tabela temporária. Por exemplo, se um procedimento armazenado criar uma tabela temporária com uma restrição de chave primária nomeada, o procedimento armazenado não poderá ser executado simultaneamente por vários usuários.
Trabalho em um ambiente em que fazemos uso significativo de alguns procedimentos armazenados que usam tabelas temporárias indexadas e nunca encontramos um problema em que os usuários precisavam esperar que uma execução fosse concluída antes do início da próxima. Espero que continue assim, mas estou preocupado que isso possa se tornar um problema se essa advertência não for entendida adequadamente.
Especificamente, não estou claro sobre os seguintes pontos:
- Isso se aplica apenas a tabelas temporárias globais ou também locais? Parece estranho que uma tabela que não esteja visível fora da sessão (como no último caso) impeça a execução simultânea de outra sessão.
- O que qualifica como uma "restrição nomeada"? Nem todas as restrições têm nomes (mesmo que sejam geradas pelo sistema)? Isso se refere a restrições com um alias definido pelo usuário? Isso parece um fraseado ruim para mim.
- "Múltiplos usuários" realmente significa várias sessões? Esses procedimentos são chamados por meio de nosso aplicativo usando uma conta de serviço única; portanto, 99,9% das chamadas para nossos scripts são feitas no banco de dados por essa conta única (e não estou preocupado com a ligação ocasional que um administrador pode fazer no back-end). Se a conta de serviço puder executar o sproc em várias sessões simultaneamente, esse problema é discutível para meus propósitos.