Jika Anda ingin mendapatkan ini di semua lingkungan Anda, untuk semua database Anda ... dan Anda tidak keberatan menggunakan PowerShell ... Anda perlu menjalankan ini dari mesin yang setidaknya memiliki SQL Server 2008 Management Studio diinstal.
# Load SMO
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | Out-Null
function Get-TableSize ([string[]]$server) {
foreach ($srv in $server) {
$s = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $srv
$s.Databases.Tables |
? {-Not $_.IsSystemObject} |
Select @{Label="Server";Expression={$srv}},
@{Label="DatabaseName";Expression={$_.Parent}},
@{Label="TableName";Expression={$_.Name}},
@{Label="SizeKB";Expression={$_.DataSpaceUsed}}
}
}
Seperti yang diberi label DataSpaceUsedkeluaran objek SMO di "KB", Anda dapat memodifikasi ini menjadi ukuran pilihan Anda dengan hanya meletakkan referensi singkat untuk itu. Jadi jika saya ingin "MB": $_.DataSpaceUsed/1MB.
Dalam fungsinya ([string[]]$server), tanda kurung "[]" berarti parameter menerima array objek. Jadi, jika server Anda terdaftar dalam file, Anda dapat memanggil fungsi seperti:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Saya lebih suka menggunakan Out-GridViewawalnya untuk meninjau output, dan mudah menyalin langsung ke Excel untuk saya. Anda juga dapat menampilkan ini ke format PowerShell lain yang didukung jika diinginkan.
Contoh dengan tangkapan layar, Anda juga bisa daftar server keluar:
