Den här frågan har funnits här ett tag och du har förmodligen hittat ditt svar vid det här laget, men för de som letar efter ett enkelt sätt att göra detta har de nuvarande versionerna av SQL Server Powershell-moduler inbyggda kommandon och metoder som stöder den här funktionen från SMO.
Du kan använda Get-SqlDatabase och metoder som .Script() och .EnumScript().
Detta kommer till exempel att generera CREATE-skript för användardefinierade funktioner och spara det i filen:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Om du vill skripta data och element som index, nycklar, triggers, etc. måste du specificera skriptalternativen, så här:
$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"
Observera att Script()-metoden inte stöder skriptdata. Använd EnumScript() för tabeller.
Om du bara vill skripta data, som ombedd, kan du prova $scriptOptions.ScriptData = $True
och $scriptOptions.ScriptSchema = $False
.