Kopieren von Daten zwischen unterschiedlichen Sortierungen
Daten können zwischen Unicode-Spalten problemlos verschoben werden. Eine Konvertierung ist nicht notwendig. Daten, die zwischen Spalten verschoben werden, die Nichtunicode-Zeichendaten enthalten, müssen jedoch von der Quellcodepage in die Zielcodepage konvertiert werden. Eine Codepage ist ein geordneter Zeichensatz eines bestimmten Skripts, in dem jedem Zeichen ein numerischer Index oder ein Codepunktwert zugeordnet ist. Codepages unterstützen Zeichensätze und Tastaturlayouts, die von verschiedenen Microsoft Windows-Gebietsschemas verwendet werden. Ein Liste der unterstützten Codepages finden Sie unter Sortierungs- und Codepage-Architektur.
Standardmäßig werden Zeichendaten wie folgt konvertiert:
Operation | Zeichendaten konvertiert in |
---|---|
Exportieren |
OEM-Codepagezeichen |
Importieren |
ANSI/Microsoft Windows-Codepagezeichen |
Durch die Konvertierung zwischen OEM- und ANSI-Codepages gehen Sonderzeichen oder DBCS-Zeichen (Double-Byte Character Set, Doppelbyte-Zeichensatz) verloren. Um solche Konvertierungen zu vermeiden, können Sie eine Codepage oder, für Microsoft SQL Server 7.0 oder höher, eine Sortierung angeben.
Hinweis: |
---|
Informationen zum Übertragen einer Datenbank von einer Sortierung in eine andere finden Sie auf dieser Microsoft-Website. |
Ab SQL Server 7.0 wird die physikalische Speicherung von Zeichenfolgen durch Sortierungen gesteuert. Microsoft SQL Server 2005 unterstützt das Festlegen von Sortierungen auf vier Ebenen: Serverinstanz, Datenbank, Tabellenspalte und Ausdruck. Eine SQL Server-Sortierung gibt drei Eigenschaften an:
- Die Codepage, die zum Speichern von Nichtunicode-Zeichendaten verwendet wird.
Hinweis: Microsoft SQL Server 6.5 und früher verwendeten zwar Codepages, speicherten sie aber nicht in Sortierungen. - Die Sortierreihenfolge, die für die Unicode-Datentypen (nchar, nvarchar und ntext) verwendet wird. Eine Sortierreihenfolge definiert die Sequenz, in der Zeichen sortiert werden, und die Methode, die für die Auswertung von Zeichen in Vergleichsvorgängen verwendet wird.
- Die Sortierreihenfolge, die für die Nichtunicode-Zeichendatentypen (char, varchar und text) verwendet wird.
Eine Einführung in Codepages und Sortierungen finden Sie unter Sortierungsoptionen und internationale Unterstützung. Ausführliche Informationen finden Sie unter Arbeiten mit Sortierungen.
Verwenden einer Sortierung auf Spaltenebene
In SQL Server 7.0 und höher können Sie die Konvertierung von Daten steuern, indem Sie die Sortierung angeben, mit der die Daten für einen Massenexport im Feld der Zieldatendatei gespeichert werden, oder für einen Massenimportvorgang die Spalte der Zieltabelle. Alle erforderlichen Übersetzungen zwischen der Sortierung der Datendatei und den Sortierungen der Tabellenspalten in der Datenbank werden intern durch den Import- oder Exportvorgang ausgeführt.
Hinweis: |
---|
Um die Konvertierung von Daten zwischen Codepages in Microsoft SQL Server 6.0 oder Microsoft SQL Server 6.5 zu steuern, müssen Sie eine Codepage mithilfe einer Codepageoption (Schalter bcp-C oder die Transact-SQL-Option CODEPAGE) im Befehl angeben. Weitere Informationen finden Sie weiter unten unter Verwenden einer Codepage. Für SQL Server 7.0 und höher kann eine Codepage angegeben werden, aber es ist besser, die Sortierung in einer Formatdatei anzugeben. |
Sortierungen gelten bei Massenimport- und Massenexportvorgängen immer für SQLCHAR-Spalten. Spaltensortierungen werden für Spalten immer ignoriert, für die SQLCHAR oder SQLNCHAR nicht als Hostdatentyp angegeben ist. Mithilfe von Sortierungen wird die Sortierreihenfolge für SQLCHAR- und SQLNCHAR-Spalten während Massenimportvorgängen bestimmt, bei denen im ORDER-Hinweis auf die Spalten verwiesen wird.
Sie müssen eine Formatdatei verwenden, um die Sortierung anzugeben. Beide Formatdateitypen unterstützen das Angeben von Sortierungen auf Spaltenebene. Informationen zum Verwenden von Sortierungen in Nicht-XML-Formatdateien finden Sie im folgenden Abschnitt, Angeben von Sortierungen auf Spaltenebene in Nicht-XML-Formatdateien. Informationen zum Verwenden von Sortierungen in XML-Formatdateien finden Sie unter Grundlegendes zu XML-Formatdateien.
Angeben von Sortierungen auf Spaltenebene in Nicht-XML-Formatdateien
Die letzte Spalte einer Nicht-XML-Formatdatei (die Spalte an der Ordnungsposition 8) enthält eine Sortierungsspezifikation, die definiert, wie die Daten für diese Spalte in der Datendatei gespeichert werden. Folgende Sortierungsspaltenoptionen sind verfügbar:
Option
Beschreibung
name
Gibt den Namen der Sortierung an, die zum Speichern der Daten in der Datendatei verwendet wird. Ein Liste der SQL-Sortierungsnamen finden Sie unter SQL-Sortierungsname (Transact-SQL).
RAW
Gibt an, dass die Daten in der Codepage gespeichert werden, die in einer Codepageoption im Befehl oder im BCPFILECP-Hinweis von bcp_control angegeben ist. Wenn keine dieser Optionen angegeben ist, wird für die Datendatei die Sortierung der OEM-Codepage des Clientcomputers verwendet.
Hinweis:
Weitere Informationen zu den Codepageoptionen finden Sie weiter unten unter "Verwenden einer Codepage". Weitere Informationen zum BCPFILECP-Hinweis finden Sie unter bcp_control.
""
Ist identisch mit RAW.
Beispiele
Das folgende Beispiel zeigt eine Nicht-XML-Formatdatei, für die für die Felder 2 und 3 Spaltensortierungen angegeben sind. Die Sortierungsinformationen sind fett dargestellt.
9.0
4
1 SQLCHAR 0 7 "\t" 1 DepartmentID ""
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "\t" 3 GroupName SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 24 "\r\n" 4 ModifiedDate ""
Hinweis: |
---|
Die vorausgehende Formatdatei betrifft die HumanResources.Department-Tabelle in der AdventureWorks-Beispieldatenbank, die vier Spalten aufweist: DepartmentID, Name, GroupName und ModifiedDate. Weitere Informationen zu dieser Tabelle finden Sie unter Department-Tabelle (AdventureWorks). |
Weitere Informationen zu Nicht-XML-Formatdateien finden Sie unter Grundlegendes zu Nicht-XML-Formatdateien.
Verwenden einer Codepage
Um die Konvertierung von Daten zwischen Codepages in SQL Server 6.0 oder SQL Server 6.5 zu steuern, müssen Sie eine Codepage im Befehl angeben.
Hinweis: |
---|
Um die Konvertierung von Daten in SQL Server 7.0 und höher zu steuern, empfiehlt Microsoft die Verwendung einer Formatdatei, um Sortierungen auf Spaltenebene für einen Massenexport- oder Massenimportvorgang anzugeben. Weitere Informationen finden Sie weiter oben unter "Verwenden einer Sortierung auf Spaltenebene". |
Für das Angeben einer Codepage gilt folgende Syntax:
- Um eine Codepage in einem bcp-Befehl anzugeben, verwenden Sie den Schalter -C:
-C { ACP | OEM | RAW | code_page } - Um eine Codepage in einer BULK INSERT- oder INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung anzugeben, verwenden Sie die Option CODEPAGE.
CODEPAGE = { **'**ACP '| **'**OEM '| **'**RAW '| 'code_page' }
Sowohl der Schalter -C als auch die Option CODEPAGE akzeptieren die folgenden Werte für die Codepage.
Codepagewert | Beschreibung |
---|---|
ACP |
Gibt während eines Importvorgangs an, dass Datenfelder vom Datentyp char, varchar oder text von der ANSI/Windows-Codepage (ISO 1252) in die SQL Server-Codepage konvertiert werden. Gibt während eines Exportvorgangs an, dass bcp diese Spalten von der SQL Server-Codepage in die ANSI/Windows-Codepage konvertiert. |
OEM (Standard) |
Gibt während eines Importvorgangs an, dass Datenfelder vom Datentyp char, varchar oder text von der OEM-Codepage des Systems in die SQL Server-Codepage konvertiert werden. Gibt während eines Exportvorgangs an, dass bcp diese Spalten von der SQL Server-Codepage in die OEM-Codepage des Systems konvertiert. |
RAW |
Es erfolgt keine Konvertierung von einer Codepage zu einer anderen. Dies ist die schnellste Option. |
code_page |
Eine spezifische Codepagenummer (z. B. |
Beispiele
Die folgenden Beispiele verwenden die HumanResources.myTeam-Tabelle in der AdventureWorks-Datenbank. Bevor Sie die Beispiele ausführen können, müssen Sie diese Tabelle erstellen. Informationen zu dieser Tabelle und zur Vorgehensweise zum Erstellen dieser Tabelle finden Sie unter Erstellen der HumanResources.myTeam-Tabelle.
Hinweis: |
---|
Vor dem Testen des folgenden Beispiels sollten Sie die vorhandenen Zeilen in der myTeam-Tabelle löschen, um Primärschlüsselkonflikte zu vermeiden. |
A. Verwenden einer Codepage mit bcp
Dieses Beispiel verwendet bcp zum Massenexportieren der Daten aus der HumanResources.myTeam
-Tabelle in der AdventureWorks
-Datenbank in die Datendatei myTeam850.txt
. Außerdem wird die Codepage 850
verwendet. Geben Sie an der Windows-Eingabeaufforderung Folgendes ein:
bcp AdventureWorks.HumanResources.myTeam out myTeam850.txt -c -C850 -T
B. Verwenden einer Codepage mit BULK INSERT
Dieses Beispiel verwendet BULK INSERT zum Massenimportieren der Datei myTeam850.txt
, die im vorherigen bcp-Beispiel erstellt wurde, in die AdventureWorks``HumanResources.myTeam
-Tabelle.
Führen Sie mithilfe eines Abfragetools wie dem SQL Server Management Studio-Abfrage-Editor die folgenden Anweisungen aus:
USE AdventureWorks
GO
DELETE HumanResources.myTeam
GO
BULK INSERT HumanResources.myTeam
FROM 'C:\myTeam850.txt'
WITH (CODEPAGE = 850);
GO
Massenexportieren von Daten zwischen unterschiedlichen Sortierungen
Bei einem Massenexportvorgang steuert die Sortierung die Codepage, die zum Speichern von Zeichendaten in der Datendatei verwendet wird. Dies gilt für folgende Elemente:
- Alle Spalten in einer Datendatei im Zeichenformat
- Alle Spalten in einer systemeigenen Datei, bei denen SQLCHAR als Hostdatei-Datentyp angegeben ist
- SQLCHAR-Zeichen, deren Werte größer als 127 oder kleiner als 32 sind
Sortierungen werden auf Zeichen angewendet, deren Werte zwischen 32 und 127 liegen. Alle Codepages ordnen jedoch den Werten zwischen 32 und 127 dieselben Zeichen zu, weshalb die Verwendung unterschiedlicher Sortierungen keine Auswirkung hat.
Es gelten die folgenden Regeln, um zu bestimmen, welche Sortierung oder Codepage für einen Massenexportvorgang verwendet wird:
- Wenn eine Spaltensortierung in einer Formatdatei oder mithilfe der ODBC-Funktion bcp_setcolfmt (bcp_setcolfmt) angegeben wird, werden die Zeichendaten mit der ANSI-Codepage, die der Sortierung zugeordnet ist, gespeichert.
- Wenn keine Spaltensortierung angegeben wurde, aber eine Codepage mithilfe der Codepageoption im Befehl oder im BCPFILECP-Hinweis von bcp_control angegeben wurde, werden alle SQLCHAR-Daten aus Spalten ohne definierte Spaltensortierung mit der angegebenen Codepage gespeichert.
Hinweis: Weitere Informationen zu den Codepageoptionen finden Sie weiter oben unter "Verwenden einer Codepage". Weitere Informationen zum BCPFILECP-Hinweis finden Sie unter bcp_control. - Wenn Sie keine Sortierung oder Codepage angeben, werden SQLCHAR-Daten mithilfe der OEM-Codepage des Clientcomputers gespeichert.
Hinweis: |
---|
Informationen zur Sortierung/Codepage werden nicht in einer Datendatei gespeichert. |
Massenimportieren von Daten zwischen unterschiedlichen Sortierungen
Für einen Massenimportvorgang gilt die Interpretation der Codepage für Spalten, die in einer Datendatei im Zeichenformat (SQLCHAR) gespeichert sind. In einer Datendatei im Zeichenformat werden alle Spalten als SQLCHAR gespeichert. Da keine Informationen zur Sortierung/Codepage in einer Datendatei gespeichert werden, müssen Sie für einen Massenimportvorgang die Informationen zur Sortierung/Codepage der Datendateien bereitstellen.
Es gelten die folgenden Regeln, um zu bestimmen, welche Sortierung oder Codepage für einen Massenimportvorgang verwendet wird:
- Wenn eine Spaltensortierung in einer Formatdatei oder mithilfe der ODBC-Funktion bcp_setcolfmt (bcp_setcolfmt) angegeben wird, werden die SQLCHAR-Daten in einer Datendatei mit der ANSI-Codepage, die der angegebenen Spaltensortierung zugeordnet ist, interpretiert. Stellen Sie sicher, dass die angegebenen Sortierungen mit den Sortierungen in der Datendatei übereinstimmen.
- Wenn keine Spaltensortierung angegeben ist, aber eine Codepage mithilfe der Codepageoption im Befehl oder im BCPFILECP-Hinweis von bcp_control angegeben wird, werden die SQLCHAR-Daten mit der angegebenen Codepage interpretiert.
Hinweis: Weitere Informationen zu den Codepageoptionen finden Sie weiter oben unter Verwenden einer Codepage. Weitere Informationen zum BCPFILECP-Hinweis finden Sie unter bcp_control. - Wenn Sie keine Sortierung oder Codepage angeben, werden Daten in SQLCHAR-Spalten mithilfe der OEM-Codepage des Clientcomputers interpretiert.
Bei einem Massenimportvorgang steuert die definierte Sortierung Folgendes:
- Wie der Vorgang versucht, die Codepage der SQLCHAR-Spalten in der Datendatei zu interpretieren.
- Wie bcp oder BULK INSERT den ORDER-Hinweis anwendet, falls dieser angegeben ist.
Wenn Sie den ORDER-Hinweis verwenden, interpretiert der Massenimportvorgang den ORDER-Hinweis mithilfe von Sortierungen ordnungsgemäß. Dieser Hinweis gilt für SQLCHAR- und SQLNCHAR-Spalten. Die Daten in den Spalten, auf die durch den ORDER-Hinweis verwiesen wird, müssen in der für die Spalten definierten Sortierung vorliegen. Weitere Informationen finden Sie unter Steuern der Sortierreihenfolge beim Massenimport von Daten.
Siehe auch
Konzepte
Verwenden des Unicode-Zeichenformats zum Importieren und Exportieren von Daten
Verwenden des systemeigenen Unicode-Formats zum Importieren oder Exportieren von Daten
Arbeiten mit Sortierungen
Andere Ressourcen
bcp_control
bcp (Dienstprogramm)
bcp_setcolfmt
BULK INSERT (Transact-SQL)
Formatdateien zum Importieren oder Exportieren von Daten
Internationale Überlegungen zu Datenbanken und Datenbankmodulanwendungen
OPENROWSET (Transact-SQL)