Hier ist eine PowerShell-Version:
Verwenden von SQL Server-Verwaltungsobjekten (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
}
Abhängig von der Anzahl der Datenbanken können Sie die obige Funktion für eine Liste aller Datenbanknamen verwenden, die in einer Variablen enthalten sind, und diese alle gleichzeitig ausgeben, wenn Sie sich mit einem Server befassen:
$DBList = 'MyDatabase1','MyDatabase2'
foreach ($d in $DBList) {
Find-EmptyTables -server MyServer -database $d |
Select @{Label="Database";Expression={$d}}, Schema, Name, RowCount
}
Im Allgemeinen erstelle ich nur eine Abfrage, die die gewünschte Abfrage erstellt, und führe sie dann manuell aus, aber wenn Sie alles auf einmal möchten ...
quelle
Als zusätzliche Antwort ist hier die undokumentierte gespeicherte Systemprozedur
sp_MSforeachtable
nützlich.Es gelten die üblichen Warnungen zu undokumentierten Funktionen.
Sie können sich den Quellcode der Prozedur in master ansehen, wenn Sie neugierig sind oder sicher sein möchten, dass er keine bösen Nebenwirkungen hat. Es verwendet dynamisches SQL zum Erstellen eines Cursors, der für die Leistung schlecht ist (Cursor = langsam!). Verwenden Sie dieses Verfahren daher nur für eine einmalige Aufgabe.
Darüber hinaus
sp_MSforeachtable
ist in der Azure-Datenbank nicht verfügbar.quelle
quelle
quelle