To pytanie jest tutaj od jakiegoś czasu i prawdopodobnie znalazłeś już odpowiedź, ale dla tych, którzy szukają prostego sposobu, aby to zrobić, obecne wersje modułów Powershell serwera SQL mają natywne polecenia i metody, które obsługują tę funkcjonalność z SMO.
Możesz użyć Get-SqlDatabase i metody takie jak .Script() i .EnumScript().
Na przykład spowoduje to wygenerowanie skryptów CREATE dla funkcji zdefiniowanych przez użytkownika i zapisanie ich w pliku:
$Database = Get-SqlDatabase -ServerInstance $YourSqlServer -Name $YourDatabaseName
$MyFuncs = $Database.UserDefinedFunctions | Where Schema -eq "dbo"
$MyFuncs.Script() | Out-File -FilePath ".\SqlScripts\MyFunctions.sql"
Jeśli chcesz skryptować dane i elementy takie jak indeksy, klucze, wyzwalacze itp. będziesz musiał określić opcje skryptu, takie jak:
$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"
Zauważ, że metoda Script() nie obsługuje danych skryptowych. Użyj EnumScript() dla tabel.
Jeśli chcesz skryptować tylko dane, zgodnie z prośbą, możesz spróbować $scriptOptions.ScriptData = $True
i $scriptOptions.ScriptSchema = $False
.