Deze vraag is hier al een tijdje en je hebt waarschijnlijk je antwoord inmiddels gevonden, maar voor degenen die op zoek zijn naar een eenvoudige manier om dit te doen:de huidige versies van SQL server Powershell-modules hebben native commando's en methoden die deze functionaliteit van SMO ondersteunen.
U kunt Get-SqlDatabase . gebruiken en methoden zoals .Script() en .EnumScript().
Dit zal bijvoorbeeld CREATE-scripts genereren voor door de gebruiker gedefinieerde functies en deze opslaan in een bestand:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Als u gegevens wilt scripten en elementen zoals indexen, sleutels, triggers, enz. moet u de scriptopties als volgt specificeren:
$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"
Houd er rekening mee dat de methode Script() geen scriptgegevens ondersteunt. Gebruik EnumScript() voor tabellen.
Als u alleen gegevens wilt scripten, zoals gevraagd, kunt u $scriptOptions.ScriptData = $True
proberen en $scriptOptions.ScriptSchema = $False
.