Udostępnij za pośrednictwem


Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Hurtownia w Microsoft Fabric

Format znaku jest zalecany podczas zbiorczego eksportowania danych do pliku tekstowego, który ma być używany w innym programie lub podczas zbiorczego importowania danych z pliku tekstowego generowanego przez inny program.

Format znaków używa formatu danych znaków dla wszystkich kolumn. Przechowywanie informacji w formacie znaków jest przydatne, gdy dane są używane z innym programem, takim jak arkusz kalkulacyjny, lub gdy dane muszą zostać skopiowane do wystąpienia programu SQL Server od innego dostawcy bazy danych, takiego jak Oracle.

Notatka

W przypadku zbiorczego transferu danych między wystąpieniami programu Microsoft SQL Server, gdy plik danych zawiera dane znaków Unicode, ale nie zawiera żadnych znaków rozszerzonych ani DBCS, należy użyć formatu znaków Unicode. Aby uzyskać więcej informacji, zobacz Używanie formatu znaków Unicode do importowania lub eksportowania danych (SQL Server).

Zagadnienia dotyczące używania formatu znaków

W przypadku korzystania z formatu znaków należy wziąć pod uwagę następujące kwestie:

  • Domyślnie narzędzie bcp oddziela pola danych znakowych znakiem tabulatora i kończy rekordy znakiem nowej linii. Aby uzyskać informacje na temat określania alternatywnych terminatorów, zobacz Określanie pól i terminatorów wierszy (SQL Server).

  • Domyślnie przed eksportem zbiorczym lub importowaniem danych trybu znaków są wykonywane następujące konwersje:

    Kierunek operacji zbiorczej Konwersja
    Eksport Konwertuje dane na reprezentację znaków. W przypadku jawnego żądania dane są konwertowane na żądaną stronę kodów dla kolumn znaków. Jeśli nie określono strony kodowej, dane znaków są konwertowane przy użyciu strony kodowej producenta OEM komputera klienckiego.
    Importowanie Konwertuje dane znaków na natywną reprezentację, gdy jest to konieczne, i tłumaczy dane znaków ze strony kodowej klienta na stronę kodowej co najmniej jednej kolumny docelowej.
  • Aby zapobiec utracie znaków rozszerzonych podczas konwersji, użyj formatu znaków Unicode lub określ stronę kodową.

  • Wszystkie sql_variant dane przechowywane w pliku w formacie znaków są przechowywane bez metadanych. Każda wartość danych jest konwertowana na format znaków zgodnie z regułami niejawnego przekształcania danych. Podczas importowania do kolumny sql_variant dane są importowane jako char. Podczas importowania do kolumny z typem danych innym niż sql_variantdane są konwertowane z char przy użyciu niejawnej konwersji. Aby uzyskać więcej informacji na temat konwersji danych, zobacz Konwersja typu danych (Aparat bazy danych).

  • Narzędzie bcp eksportuje pieniądze wartości jako pliki danych formatu znaków z czterema cyframi po przecinku i bez żadnych symboli grupowania cyfr, takich jak separatory przecinków. Na przykład kolumna pieniędzy zawierająca wartość 1,234,567.123456 jest eksportowana zbiorczo do pliku danych jako ciąg znakowy 1234567.1235.

Opcje poleceń dla formatu znaków

Możesz zaimportować dane formatu znaków do tabeli, używając bcp, BULK INSERT (Transact-SQL)lub OPENROWSET (Transact-SQL). W przypadku polecenia bcp lub BULK INSERT (Transact-SQL) instrukcji można określić format danych w instrukcji . W przypadku instrukcji OPENROWSET (Transact-SQL) należy określić format danych w pliku formatu.

Format znaku jest obsługiwany przez następujące opcje polecenia:

Polecenie Opcja Opis
bcp -c Powoduje, że narzędzie bcp korzysta z danych znakowych.
BULK INSERT DATAFILETYPE ='char' Użyj formatu znaków podczas zbiorczego importowania danych.
OPENROWSET N/A Musi używać pliku formatu

* Aby załadować dane (-c) do formatu zgodnego z wcześniejszymi wersjami klientów programu SQL Server, użyj przełącznika -V. Aby uzyskać więcej informacji, zobacz Importowanie danych w formacie natywnym i znakowym z wcześniejszych wersji SQL Server.

Notatka

Alternatywnie można określić formatowanie dla poszczególnych pól w pliku formatu. Aby uzyskać więcej informacji, zobacz Pliki formatu do importu lub eksportu danych (SQL Server).

Przykładowe warunki testu

Przykłady w tym artykule są oparte na poniższej tabeli i pliku formatu.

Przykładowa tabela

Poniższy skrypt tworzy testową bazę danych, tabelę o nazwie myChar i wypełnia tabelę kilkoma początkowymi wartościami. Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS).

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myChar ( 
   PersonID smallint NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date,
   AnnualSalary money
   );

-- Populate table
INSERT TestDatabase.dbo.myChar
VALUES 
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myChar;

Przykładowy plik formatu innego niż XML

Program SQL Server obsługuje dwa typy plików formatu: format inny niż XML i format XML. Format inny niż XML jest oryginalnym formatem obsługiwanym przez wcześniejsze wersje programu SQL Server. Aby uzyskać więcej informacji, zobacz Pliki w formacie innym niż XML (SQL Server). Następujące polecenie używa narzędzia bcp do generowania pliku formatu innego niż xml, myChar.fmt, na podstawie schematu myChar. Aby użyć polecenia bcp w celu utworzenia pliku formatu, określ argument FORMAT i użyj nul zamiast ścieżki pliku danych. Opcja formatowania wymaga również opcji -f. Ponadto w tym przykładzie kwalifikator c służy do określania danych znaków, a T służy do określania zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń.

W wierszu polecenia wprowadź następujące polecenie:

bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c 

REM Review file
Notepad D:\BCP\myChar.fmt

Ważny

Upewnij się, że plik w formacie innym niż XML kończy się powrotem karetki i znakiem końca linii. W przeciwnym razie prawdopodobnie zostanie wyświetlony następujący komunikat o błędzie:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Przykłady

W poniższych przykładach użyto plików bazy danych i formatu utworzonych wcześniej w tym artykule.

Eksportowanie danych przy użyciu bcp i formatu znakowego

-c przełącznik i polecenie OUT.

Plik danych utworzony w tym przykładzie będzie używany we wszystkich kolejnych przykładach.

W wierszu polecenia wprowadź następujące polecenie:

bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c

REM Review results
NOTEPAD D:\BCP\myChar.bcp

Użyj bcp i formatu znaków do importowania danych bez pliku formatu

Przełącznik -c i polecenie IN. W wierszu polecenia wprowadź następujące polecenie:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Importowanie danych z plikiem formatu innego niż XML przy użyciu formatu bcp i formatu znaków

Przełączniki -c i -f oraz polecenie IN. W wierszu polecenia wprowadź następujące polecenie:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"

REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"

Używanie funkcji BULK INSERT i formatu znaków bez pliku formatu

Argument DATAFILETYPE. Wykonaj następujący skrypt Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
    FROM 'D:\BCP\myChar.bcp'
    WITH (
        DATAFILETYPE = 'Char'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Używanie funkcji BULK INSERT i formatu znaków z plikiem formatu innego niż XML

Jest to przykład argumentu FORMATFILE. Wykonaj następujące Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
   FROM 'D:\BCP\myChar.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myChar.fmt'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Używanie formatu OPENROWSET i formatu znaków z plikiem formatu innego niż XML

Przykład argumentu FORMATFILE. Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myChar;  -- for testing
INSERT INTO TestDatabase.dbo.myChar
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myChar.bcp', 
        FORMATFILE = 'D:\BCP\myChar.fmt'  
        ) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myChar;

Aby używać formatów danych do importowania zbiorczego lub eksportu zbiorczego: