|
Microsoft SQL Server - Datenimport
[Dieses Kapitel wird zur Zeit noch bearbeitet]
Textdateien
Da Textdateien in den unterschiedlichsten Formaten vorliegen können, gilt es zunächst einige Vorbedingungen
zu prüfen, bevor man entscheiden kann mit welcher Methode die Daten am Besten geladen werden können.
Bevor Sie sich für eine Methode entscheiden, sollten die folgenden Fragen zum Aufbau der Textdateien, der Zieltabellen und
der Aufgabenstellung geklärt werden:
Textdateien - Fragen
- Besitzen die einzelnen Spalten in der Textdatei eine feste Spaltenbreite oder sind die
Spalten durch ein Trennzeichen voneinander getrennt (meist Tabulator, Semikolon, Komma)?
- Sind Textspalten in Anführungszeichen (") gesetzt?
- Sind in den Daten Datumswerte vorhanden und falls ja, in welchem Format ist das Datum angegeben?
- Sind in den Daten Dezimalzahlen vorhanden und wird ein Dezimalpunkt oder das Dezimalkomma als Trennzeichen verwendet?
- Mit welchem Zeichensatz (ANSI, OEM, Unicode, Sonstige) wurde die Textdatei erstellt?
- Sind die Daten in einem gültigen, konsistenten Zustand für die Zieltabelle (z.B. Doppelte Primärschlüssel u.ä.)?
- Besitzt die Zieltabelle eine IDENTITY-Spalte?
- Enthält die erste Zeile die Spaltenüberschriften?
- Besteht die Zieltabelle bereits oder muss Sie erstellt werden?
- Sollen lediglich neue Daten hinzugefügt werden, oder soll ein Abgleich stattfinden (Hinzufügen, Aktualisieren, Löschen von Daten)?
Feste Spaltenbreite oder Trennzeichen
Am einfachsten lassen Sie Daten aus einer Tabelle mit fester Spaltenbreite importieren. Als Werkzeuge kommen
bcp, BULK INSERT und DTS in Betracht. Falls die Spalten und Zeilen durch Trennzeichen markiert sind muss selbstverständlich sichergestellt
werden, dass das Trennzeichen nicht innerhalb der Daten verwendet wird.
Textspalten in Anführungszeichen
Bei vielen Exportprogrammen werden Textspalten mit umschließenden Anführungszeichen exportiert; falls Ihre
Datei solche Daten verwendet können die schnellen Methoden bcp und BULK INSERT nur eingeschränkt verwendet werden, da
für jedes Anführungszeichen in der Formatdatei eine entsprechende Pseudo-Spalte definiert werden müsste. Einfacher ist bei
solchen Dateien der Import über DTS oder bei kleinen Dateien mit Hilfe einer Ad-hoc Abfrage oder eines Verbindungsservers.
Datumswerte
Sind in der Textdatei Datumswerte vorhanden, so muss das Datumsformat bestimmten Konventionen entsprechen, wenn ein
schneller Import per bcp oder Bulk Insert erfolgen soll. Ab dem SQL Server 2000 kann durch Setzen der Option -R das Datumsformat
aus der Ländereinstellung des Client-Rechners verwendet werden.
Dezimalzahlen
Für Dezimalzahlen verwendet BCP grundsätzlich den Dezimalpunkt als Trennzeichen. Lediglich für Zielspalten vom Typ money kann
die Ländereinstellung berücksichtigt werden. Sind in den Daten Dezimalzahlen vorhanden, die das Dezimalkomma verwenden, muss
DTS oder eine andere Methode verwendet werden.
Zeichensatz
Speziell bei deutschen Daten gibt es immer wieder Probleme beim Import von Daten die Umlaute enthalten.
Dieses Problem taucht immer auf, wenn unterschiedliche Zeichensätze verwendet werden. In den meisten Fällen
liegen die Importdateien im OEM oder ANSI Format vor. Beim Massenkopieren (bcp) sollte das entsprechende Format angegeben werden.
Konsistente Daten
Das schnelle Laden mit Hilfe von bcp bricht ab, wenn beim Import Fehler wie doppelte Primärschlüssel o.ä. auftauchen.
Falls Sie nicht sicher sind, ob solche Daten existieren, empfiehlt es sich die Daten zunächst in eine temporäre Tabelle zu importieren
und anschließend die "gesäuberten" Daten in die eigentliche Zieltabelle zu übertragen.
Identity-Spalte
Wird durch den Import ein expliziter Wert für eine IDENTITY-Spalte in der Zieltabelle angegeben, so muss dies
speziell angegeben werden. Dies ist bei allen Importmethoden möglich (bcp -E, SET IDENTITY_INSERT tabelle ON).
Zieltabelle
Falls die Zieltabelle bereits besteht und das gleiche Format besitzt wie die Textdatei können alle Werkzeuge verwendet werden.
Besteht die Zieltabelle noch nicht und sind auch keine Informationen über den Aufbau der Tabelle vorhanden, so hilft DTS am ehesten, um die
Zieltabelle zu erstellen.
Reiner Import oder Abgleich
Wenn Daten lediglich importiert werden bieten sich BULK INSERT und bcp an. Falls ein weitergehender Abgleich stattfinden soll ist sicherlich
DTS das bessere Werkzeug für den Import der Textdatei(en).
Beispiele
Import von Textdateien mit Hilfe von bcp
Import von Textdateien mit Hilfe von BULK INSERT
Import von Textdateien über einen Verbindungsserver
Import von Textdateien mit DTS (Data Transformation Services
Import von Textdateien über Microsoft Jet OLEDB Provider
Import einer kompletten Textdatei in eine Datenspalte
Import von Textdateien über eine Ad-Hoc Abfrage
Verwenden von Textdateien in Transact-SQL Abfragen
| Name der Zieltabelle |
|
| Name der Importdatei |
|
| Zeichensatz der Importdatei |
|
| Feste Spaltenbreite oder Trennzeichen |
|
| Spaltentrennzeichen |
|
| Zeilentrennzeichen |
|
| Datumsformat |
|
| Währungsformat |
|
| Dezimaltrennzeichen in numerischen Feldern (außer money) |
|
| Identity-Spalte wird explizit gefüllt |
|
| Spaltenüberschriften in der ersten Zeile |
|
s.a. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcjetschema_ini_file.asp
|