Si vous vouliez obtenir cela dans tout votre environnement, pour toutes vos bases de données ... et cela ne vous dérange pas d'utiliser PowerShell ... Vous devrez l'exécuter à partir d'une machine sur laquelle SQL Server 2008 Management Studio est au moins installé.
# 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}}
}
}
Comme étiqueté les DataSpaceUsedsorties d'objet SMO dans "KB", vous pouvez le modifier pour être la mesure de votre choix en y mettant simplement la référence abrégée. Donc , si je voulais « MB »: $_.DataSpaceUsed/1MB.
Dans la fonction ([string[]]$server), les crochets "[]" signifient que le paramètre accepte un tableau d'objets. Donc, si vos serveurs sont répertoriés dans un fichier, vous pouvez appeler la fonction comme suit:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Je préfère utiliser Out-GridViewinitialement pour revoir la sortie, et elle se copie facilement directement dans Excel pour moi. Vous pouvez également les exporter vers les autres formats pris en charge de PowerShell si vous le souhaitez.
Exemple avec capture d'écran, vous pouvez également lister les serveurs:
