Aqui está uma versão do PowerShell:
Usando objetos de gerenciamento do SQL Server (SMO)
function Find-EmptyTables ($server,$database)
{
# Load SMO assembly
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
$s = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $server
$db = $s.Databases.Item($database)
$db.Tables | Where-Object { $_.RowCount -eq 0 } | Select Schema, Name, RowCount
}
Dependendo do número de bancos de dados, você pode usar a função acima em uma lista de cada nome de banco de dados preenchido em uma variável e produzir tudo ao mesmo tempo, se estiver lidando com um servidor:
$DBList = 'MyDatabase1','MyDatabase2'
foreach ($d in $DBList) {
Find-EmptyTables -server MyServer -database $d |
Select @{Label="Database";Expression={$d}}, Schema, Name, RowCount
}
Geralmente, apenas crio uma consulta que cria a consulta que desejo e depois a executo manualmente, mas se você quiser tudo de uma só vez ...
fonte
Como resposta adicional, o procedimento armazenado do sistema não documentado
sp_MSforeachtable
é útil aqui.Os avisos usuais sobre recursos não documentados se aplicam.
Você pode consultar o código-fonte do procedimento no master se estiver curioso ou se quiser ter certeza de que ele não tem efeitos colaterais desagradáveis. Ele usa SQL dinâmico para criar um cursor, o que é ruim para o desempenho (cursor = lento!), Portanto, use este procedimento apenas para uma tarefa pontual.
Além disso,
sp_MSforeachtable
não está disponível no Banco de Dados do Azure.fonte
fonte
fonte