2016-07-29 18 views
0

Ich möchte ein Import-Skript für eine MSSQL-DB über Powershell generieren (bezogen auf this question). Ich habe versucht, dies zu tun:Powershell SMO: Diese Methode unterstützt keine Skriptdaten

#Set-ExecutionPolicy RemoteSigned 

$DB_NAME = "<<dbName>>" 

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null 

$srv = new-object "Microsoft.SqlServer.Management.SMO.Server" "<<server>>" 
$conContext = $srv.ConnectionContext 
$conContext.LoginSecure = $false 
$conContext.Login = "<<user>>" 
$conContext.Password = "<<password>>" 
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conContext) 
$srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.View], "IsSystemObject") 

$db = $srv.databases[$DB_NAME] 

$scripter = new-object "Microsoft.SqlServer.Management.Smo.Scripter" $srv 

$scripter.Options.ScriptSchema = $false 
$scripter.Options.ScriptData = $true 
$scripter.Options.ScriptDrops = $false 

$scripter.Script($db) 

Aber die Ausführung dieser wirft einen Fehler:

"This method does not support scripting data" 

Ich habe auch versucht die Ausgabedatei Option zu setzen, aber dies alles nicht ändert.

Können Sie mir sagen, was ich falsch gemacht habe?

Danke!

Antwort

2

Pro Fehler unterstützt Scripter.Script keine Skriptdaten. Dies ist documented. Was nicht dokumentiert ist, was Sie stattdessen verwenden soll, aber es ist EnumScript:

$scripter.EnumScript(@($db.Tables)) 

Sie müssen die Tabellen übergeben, da einfach die Datenbank scripting wird nichts ergeben (wie, technisch gesehen, sich die Datenbank nicht enthält Daten, seine Tabellen tun).

(Die @() gewaltsam wandelt die Tables Auflistung in ein Array, denn das ist, was EnumScript erwartet.)

+0

Hallo und vielen Dank für Ihre tolle Antwort! Das hört sich so an, als könnte es mein Problem lösen. Leider bekomme ich nun diesen Fehler: Ausnahme beim Aufruf von "EnumScript" mit 1 Argument (de): "Skript fehlgeschlagen für Server 'xxx'." In ... + $ scripter.EnumScript (@ ($ db.Tables)) + ~~~~~~~~~ + KategorieInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: FailedOperationException Wissen Sie, was diese Ausnahme verursacht? Schöne Grüße! –

+0

Nein, und es hat nichts mit 'EnumScript' selbst zu tun - ich weiß, weil ich verifiziert habe, dass dieser Code gegen eine erreichbare Datenbankinstanz arbeitet. –

+0

Hi - Ich habe herausgefunden, was schief gelaufen ist: Ich möchte $ scripter.Options.ScriptSchema = $ false setzen, aber ohne das Schema bekomme ich diesen Fehler. Gibt es eine Möglichkeit, die Daten nur zu skripten? Und ich muss die Tabellen so ordnen, dass es keine Konflikte mit Fremdschlüsseln gibt. Momentan werden die Tabellen alphabetisch geschrieben, aber dies wirft Fehler beim Import in einen leeren DB ... –