Partilhar via


Update SQL Server Statistics with Powershell

It can be usefull to have a script to update statistics with powershell.

this script is very simple, you just have to connect to you database and call the updatestatistics() method for all your tables :

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null

 $s = new-object ('Microsoft.sqlserver.Management.smo.server') myServer\myInstance

 $db = $s.databases["myDB"]

 foreach ($t in $db.tables)
{
write-host "Update stat" $t.name
$t.updatestatistics("all", "fullscan")
}

the first parameter is a statistics Target, possible value are described here : https://msdn.microsoft.com/fr-fr/library/microsoft.sqlserver.management.smo.statisticstarget.aspx

the second parameter is a Statistics scan type, possible value are describe here : https://msdn.microsoft.com/fr-fr/library/microsoft.sqlserver.management.smo.statisticsscantype.aspx

If you want to update your statistics with giving a sample and not a full scan, the script become :

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null

$s = new-object ('Microsoft.sqlserver.Management.smo.server') myServer\myInstance

$db = $s.databases["myDB"]

$sample = 50

foreach ($t in $db.tables)
{
write-host "Update stat" $t.name
$t.updatestatistics("all", "percent", $sample)
}

Enjoy...