it-swarm.com.de

Wie kann ich beim Importieren von Daten in SQL Server für alle Tabellen gleichzeitig "Identitätseinfügung aktivieren" festlegen?

Ich versuche, eine Datenbank von einem Remote-Server zu kopieren. Ich habe keinen Zugriff auf die Backups oder das Dateisystem. Meine Zieldatenbank auf meinem Entwicklungscomputer muss alle Daten sowie dieselben Tabellenstrukturen abrufen, einschließlich Primärschlüssel mit Identitätseinstellungen und den restlichen Einschränkungen.

Die Import/Export-Funktion hat die Option, die Identitätseinfügung wie unten gezeigt festzulegen, aber ich muss dies manuell pro Tabelle tun. Ich habe über 300 Tabellen zu kopieren und die meisten von ihnen haben Identitätsprimärschlüssel. Dies wird ein sehr schmerzhafter Vorgang sein, bei dem die Kopie mehrmals ausgeführt wird.

Gibt es eine Möglichkeit, diese Einstellung für das Einfügen von Identitäten für alle Tabellen gleichzeitig festzulegen? Oder eine andere zuverlässige Methode zum Kopieren von Datenbanken in einem solchen Setup? Ich verwende SSMS 7.3 gegen SQL Server 2014.

(enter image description here

5
Tony_Henrich

Sie können im Import/Export-Assistenten alle Tabellen gleichzeitig erstellen. Auf der Seite Quelltabellen und -ansichten auswählen können Sie das Kontrollkästchen in der Quellleiste aktivieren. Nach der Auswahl können Sie Zuordnungen bearbeiten auswählen. Unten wird die Option Identitätseinfügung aktivieren angezeigt.

(Select Source Tables and Views

(Transfer Settings

8
pix1985

Sie können Dynamic SQL verwenden, um es für alle beschriebenen Tabellen festzulegen hier . Wenn die Datenbank groß ist, würde ich Ihnen empfehlen, das Schema auszuskripten und die Shell/Skeleton-Datenbank zu erstellen und dann bcp out zu verwenden und Daten in großen Mengen einzufügen . Sie können dies mithilfe eines Powershell- oder SQL Agent-Jobs automatisieren.

Alternativ können Sie einfach eine copy_only-Sicherung starten und copy-dbadatabase (Teil von dbatools - Powershell-basiert) verwenden, um die Datenbank von der Quelle zum Ziel zu sichern und wiederherzustellen.

1
Kin Shah

Ich denke, Sie können tun, was Sie wollen, indem Sie das Importpaket mit OLE DB-Quell-/Zielkomponenten mit der Standardidentitätseinfügung erstellen. Speichern Sie es in einer Paketdatei, anstatt es sofort auszuführen. Öffnen Sie die Paketquelle in einem Texteditor und ändern Sie global die FastLoadKeepIdentity-Eigenschaft in true alle Zieltabellen. Ändern Sie sie dann manuell in false für Tabellen ohne Identitätsspalten.

Unten finden Sie ein XML-Fragment der Paketquelle, das 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>

Speichern Sie das geänderte Paket und führen Sie es mit dem Befehlszeilenprogramm dtexec.exe oder dem grafischen Tool dtexecui.exe aus. Auf diese Weise können Sie die Kopie problemlos wiederholen, ohne den Import/Export-Assistenten erneut ausführen zu müssen.

1
Dan Guzman

Ich habe Toad verwendet, um die Einfügeanweisungen zu erstellen. Es ist ein kommerzielles Produkt und hat eine kostenlose Testversion.

0
Tony_Henrich