O SQL Server fornece um poderoso procedimento armazenado do sistema chamado sp_msForEachTable que permite aos administradores de banco de dados executar tarefas em todas as tabelas de um banco de dados com um único comando. No entanto, há uma limitação com esse procedimento – ele tenta atender a vários proprietários de objetos em um banco de dados usando a sintaxe [proprietário].[objeto]. Isso pode causar problemas quando certos comandos não podem lidar com a cláusula de propriedade e só podem lidar com um nome de tabela simples.
Para resolver essa limitação, criei uma versão modificada do procedimento sp_msForEachTable que remove a cláusula de proprietário do objeto. Esse procedimento modificado, chamado sp__ForEachTable, funciona apenas para tabelas de propriedade do usuário atual. Como os objetos geralmente são de propriedade do DBO e, como administrador de banco de dados, você é o DBO, isso não deve ser um problema na maioria dos casos.
Aqui está um exemplo de como o procedimento modificado pode ser usado:
EXEC sp__ForEachTable 'SELECT COUNT(*) FROM ?'
Este comando executará a instrução SELECT especificada em cada tabela do banco de dados, retornando a contagem de linhas em cada tabela.
É importante observar que o procedimento modificado tem algumas limitações. Ele não lida com nomes de tabela que incluem um espaço e comandos que esperam um object_id em vez de um nome de tabela não são suportados. Além disso, o exemplo de uso do DBCC SHOWCONTIG só funciona no SQL Server 2000.
O procedimento sp__ForEachTable faz parte da série de procedimentos armazenados “ForEach”, que inclui o sp_msForEachDB (opera no nível do banco de dados) e o sp_msForEachWorker (um utilitário chamado pelos outros dois). Esses procedimentos usam SQL dinâmico para replicar comandos em cada tabela ou objeto. Se você estiver interessado em aprender mais sobre SQL dinâmico, recomendo dar uma olhada nesses procedimentos para ver como eles são implementados.
Para obter mais informações sobre o procedimento original sp_msForEachTable, você pode consultar o SQL Server Books Online. Observe que o procedimento modificado, sp__ForEachTable, foi testado no SQL Server 7 e no SQL Server 2000.
Obrigado por ler e espero que este artigo tenha fornecido uma melhor compreensão do sp_msForEachTable do SQL Server e de sua versão modificada, sp__ForEachTable.