Если вы хотите получить это во всей вашей среде, для всех ваших баз данных ... и вы не возражаете против использования PowerShell ... Вам нужно будет запустить это с компьютера, на котором хотя бы установлена 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}}
}
}
Как отмечено для DataSpaceUsedвывода объекта SMO в «КБ», вы можете изменить это, чтобы оно было измерением по вашему выбору, просто поместив для него сокращенную ссылку. Так что, если я хотел "МБ" $_.DataSpaceUsed/1MB.
В функции ([string[]]$server)скобки «[]» означают, что параметр принимает массив объектов. Поэтому, если ваши серверы перечислены в файле, вы можете вызвать функцию следующим образом:
$list = get-content .\ServerList.txt
Get-TableSize -server $list | Out-GridView
Я предпочитаю использовать Out-GridViewизначально для просмотра вывода, и он легко копирует прямо в Excel для меня. При желании вы также можете вывести это в другие поддерживаемые форматы PowerShell.
Пример со скриншотом, вы также можете просто перечислить серверы:
