Oto wersja PowerShell:
Korzystanie z obiektów zarządzania 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
}
W zależności od liczby baz danych, możesz użyć powyższej funkcji na liście każdej nazwy bazy danych wypełnionej zmienną i wypisać ją jednocześnie, jeśli masz do czynienia z jednym serwerem:
$DBList = 'MyDatabase1','MyDatabase2'
foreach ($d in $DBList) {
Find-EmptyTables -server MyServer -database $d |
Select @{Label="Database";Expression={$d}}, Schema, Name, RowCount
}
Generalnie po prostu tworzę zapytanie, które tworzy zapytanie, które chcę, a następnie wykonuję je ręcznie, ale jeśli chcesz to wszystko za jednym razem ...
źródło
Jako dodatkowa odpowiedź
sp_MSforeachtable
przydatna jest tutaj nieudokumentowana procedura przechowywana w systemie .Obowiązują zwykłe ostrzeżenia o nieudokumentowanych funkcjach.
Możesz zajrzeć do kodu źródłowego procedury w trybie master, jeśli jesteś ciekawy lub chcesz mieć pewność, że nie ma żadnych nieprzyjemnych efektów ubocznych. Używa dynamicznego SQL do budowania kursora, co jest niekorzystne z punktu widzenia wydajności (kursor = wolny!), Więc używaj tej procedury tylko do jednorazowego zadania.
Ponadto
sp_MSforeachtable
nie jest dostępny w bazie danych Azure.źródło
źródło
źródło