2017-11-04 1 views
0

Ich versuche, eine Datenbank von einem Remote-Server zu kopieren. Ich habe keinen Zugriff auf seine Backups oder das Dateisystem. Meine Zieldatenbank auf meiner Entwicklungsmaschine muss alle Daten plus die gleichen Tabellenstrukturen einschließlich Hauptschlüssel mit Identität Einstellungen und den Rest der Beschränkungen erhalten.Wie "Identität einfügen" für alle Tabellen auf einmal beim Importieren von Daten in SQL Server festlegen?

Die Import/Export-Funktion hat die Option, die Identität einfügen wie unten gezeigt, aber ich muss dies manuell pro Tabelle tun. Ich habe über 300 Tabellen zu kopieren und die meisten von ihnen haben primäre Identitätsschlüssel. Dies wird ein sehr schmerzhafter Prozess sein, der die Kopie mehrmals durchführt.

Gibt es eine Möglichkeit, diese Identität Einstellung für alle Tabellen auf einmal zu setzen? Oder eine andere zuverlässige Möglichkeit, Datenbanken in einem solchen Setup zu kopieren? Ich bin mit SSMS 7.3 gegen SQL Server 2014.

enter image description here

+0

Haben alle Tabellen in Ihrer Datenbank eine Identitätsspalte? oder nur einige? – Sami

+0

Mybe Sie können [this] sehen (https://Stackoverflow.com/a/40680215/6426692) und versuchen, es zu reversieren :) – Sami

+1

Sie können dies nicht tun - 'SET IDENTITY_INSERT' kann ** nur ** sein für * * EINE TABELLE ** gleichzeitig. –

Antwort

0

I Toad verwendet ein Daten vergleichen, um zu tun, und es generierten Anweisungen für die Daten einfügen. Jede Einfügegruppe pro Tabelle wurde zwischen dem Setzen des IDENTITY_INSERT auf ON und dann auf OFF gelegt. Toad ist ein kommerzielles Produkt, hat aber eine Probezeit.

0

Ich denke, Sie können tun, was Sie wollen, indem Sie das Import-Paket mit OLE DB Quelle/Ziel-Komponenten mit der Standard-Identität einfügen. Speichern Sie es in einer Paketdatei, anstatt es sofort auszuführen. Öffnen Sie die Paketquelle in einem Texteditor und ändern Sie die Eigenschaft FastLoadKeepIdentity für die Zieltabellen mit Identitätsspalten.

Unten ist ein XML-Fragment der Paketquelle, das für jede Tabelle geändert werden muss. Unten ist die Eigenschaft, die geändert werden muss:

  <property 
       dataType="System.Boolean" 
       description="Indicates whether the values supplied for identity columns will be copied to the destination. If false, values for identity columns will be auto-generated at the destination. Applies only if fast load is turned on." 
       name="FastLoadKeepIdentity">true</property> 

das modifizierte Paket Führen Sie das dtexec.exe Befehlszeilenprogramm oder das dtexecui.exe grafische Tool. Dadurch können Sie die Kopie problemlos wiederholen, ohne den Import/Export-Assistenten erneut ausführen zu müssen.

Verwandte Themen