Ich verwende SqlBulkCopy
gegen zwei SQL Server 2008 mit verschiedenen Spaltensätzen (um einige Daten von prod
server nach dev
zu verschieben). Ich möchte also einige Spalten überspringen, die noch nicht existierten / noch nicht entfernt wurden.
Wie kann ich das tun? Ein Trick mit ColumnMappings
?
Bearbeiten:
Ich mache das nächste:
%Vor%und erhalten:
Das angegebene ColumnMapping stimmt mit keiner Spalte in der Quelle oder dem Ziel überein.
Wenn SqlBulkCopyColumnMapping verwendet wird, werden nur Spalten kopiert, für die Zuordnungen erstellt wurden.
Wenn Sie keine Zuordnung für eine Spalte erstellen, wird diese beim Kopiervorgang ignoriert.
Sie können dies im Demo-Code hier sehen - Die Beispielquelltabelle in der AdventureWorks-Demodatenbank enthält mehr Spalten als zugeordnet oder kopiert.
BEARBEITEN
Es ist schwierig, ohne weitere Informationen über das Datenbankschema sicher zu sein, aber bei einer Vermutung ist das Problem mit dieser Aussage:
%Vor% Aus Ihrer Beschreibung geht hervor, dass nicht alle Spalten in der Quelltabelle in der Zieltabelle vorhanden sind. Sie benötigen einen Filter in Ihrer Konstruktionsschleife SqlBulkCopyColumnMapping
, um Spalten zu überspringen, die nicht im Ziel vorhanden sind.
Mein C # ist nicht gut genug, um ein Beispiel zu geben, von dem ich überzeugt bin, dass es funktioniert, aber im Pseudocode wäre es
%Vor%(Ich bin sicher, dass es möglich ist, dies in einen Lambda-Ausdruck umzuwandeln)
Beachten Sie, dass dies in dem Szenario, in dem die Spaltennamen übereinstimmen, aber die Datentypen nicht kompatibel sind, nicht besonders robust ist.
Versuchen Sie Folgendes: SqlBulkCopyColumnMapping-Klasse
Ich hoffe, Sie suchen nach dem gleichen
Tags und Links sql-server c# sql-server-2008 sqlbulkcopy columnmappings