Juste une mise à jour: dans les versions actuelles des modules PowerShell SQL Server (SQL Server 2014 et suivants, je pensais. Testé sur SSMS 17), la plupart de ces options sont des commandes et des méthodes natives.
Par exemple, vous pouvez utiliser Get-SqlDatabase et des méthodes telles que .Script () et .EnumScript (). C'est vraiment utile et simple, surtout si vous voulez une approche plus granulaire (tables spécifiques et autres objets).
Par exemple, cela générera des scripts CREATE pour les fonctions définies par l'utilisateur et l'enregistrera dans un fichier:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Si vous souhaitez créer des scripts de données et d'éléments comme des index, des clés, des déclencheurs, etc., vous devrez spécifier des options de script, comme ceci:
$scriptOptions = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions
$scriptOptions.NoCollation = $True
$scriptOptions.Indexes = $True
$scriptOptions.Triggers = $True
$scriptOptions.DriAll = $True
$scriptOptions.ScriptData = $True
$Database.Tables.EnumScript($scriptOptions) | Out-File -FilePath ".\AllMyTables.sql"
Notez que la méthode Script () ne prend pas en charge les données de script. Utilisez EnumScript () pour les tableaux.
Une seule table :
($Database.Tables | Where Name -eq "MyTableName").EnumScript($scriptOptions)
Toutes vos vues, enregistrez un fichier pour chaque vue, DROP et CREATE script:
ForEach ($view in $($Database.Views | Where Schema -eq "dbo")) {
"`nIF OBJECT_ID('$($view.Name)') IS NOT NULL DROP VIEW $($view.Name);`n`n" | Out-File -FilePath ".\SqlScripts\$($view.Name).sql"
$view.Script() | Out-File -FilePath ".\SqlScripts\$($view.Name).sql" -Append
}
J'espère que cela t'aides.