Si desea obtener esto en todo su entorno, para todas sus bases de datos ... y no le importa usar PowerShell ... Necesitará ejecutar esto desde una máquina que al menos tenga instalado SQL Server 2008 Management Studio.
# 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}}
}
}
Como se etiqueta como las DataSpaceUsedsalidas del objeto SMO en "KB", puede modificar esto para que sea la medida de su elección simplemente colocando la referencia abreviada para ello. Así que si quería "MB": $_.DataSpaceUsed/1MB.
En la función ([string[]]$server), los corchetes "[]" significan que el parámetro acepta una matriz de objetos. Entonces, si tiene sus servidores listados en un archivo, puede llamar a la función de esta manera:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Prefiero usar Out-GridViewinicialmente para revisar el resultado, y se copia fácilmente directamente en Excel para mí. También puede enviar esto a los otros formatos compatibles de PowerShell si lo desea.
Ejemplo con captura de pantalla, también puede enumerar los servidores:
