Ini adalah versi PowerShell:
Menggunakan SQL Server Management Objects (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
}
Bergantung pada jumlah basis data Anda dapat menggunakan fungsi di atas terhadap daftar setiap nama basis data yang dihuni dalam suatu variabel dan mengeluarkan semuanya pada saat yang bersamaan, jika berurusan dengan satu server:
$DBList = 'MyDatabase1','MyDatabase2'
foreach ($d in $DBList) {
Find-EmptyTables -server MyServer -database $d |
Select @{Label="Database";Expression={$d}}, Schema, Name, RowCount
}
Saya biasanya hanya membuat kueri yang membuat kueri yang saya inginkan dan kemudian menjalankannya secara manual, tetapi jika Anda ingin semuanya sekaligus ...
sumber
Sebagai jawaban tambahan, prosedur tersimpan sistem tidak berdokumen
sp_MSforeachtable
berguna di sini.Peringatan biasa tentang fitur tidak berdokumen berlaku.
Anda dapat melihat kode sumber prosedur di master jika Anda penasaran atau jika Anda ingin memastikan itu tidak memiliki efek samping yang buruk. Ini menggunakan SQL dinamis untuk membangun kursor, yang buruk untuk kinerja (kursor = lambat!), Jadi hanya gunakan prosedur ini untuk tugas satu kali.
Selain itu,
sp_MSforeachtable
tidak tersedia di Azure Database.sumber
sumber
sumber