Udostępnij za pośrednictwem


Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu natywnego Unicode

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Format natywny Unicode jest przydatny, gdy informacje muszą być kopiowane z jednej instalacji programu Microsoft SQL Server do innej. Użycie formatu natywnego dla danych nietypowych pozwala zaoszczędzić czas, eliminując niepotrzebną konwersję typów danych do i z formatu znaków. Użycie formatu znaków Unicode dla wszystkich danych znaków zapobiega utracie znaków rozszerzonych podczas zbiorczego transferu danych między serwerami przy użyciu różnych stron kodu. Plik danych w formacie natywnym Unicode może być odczytywany przez dowolną metodę importu zbiorczego.

Format natywny Unicode jest zalecany w przypadku zbiorczego transferu danych między wieloma wystąpieniami programu SQL Server przy użyciu pliku danych zawierającego znaki rozszerzone lub DBCS. W przypadku danych nietypowych format natywny Unicode używa natywnych typów danych (bazy danych). W przypadku danych znaków, takich jak char, nchar, varchar, nvarchar, tekst, varchar(max), nvarchar(max)i ntextformat natywny Unicode używa formatu danych znaków Unicode.

Dane sql_variant przechowywane jako SQLVARIANT w pliku danych w formacie natywnym Unicode działają w taki sam sposób, jak w pliku danych w formacie natywnym, z wyjątkiem tego, że char i varchar wartości są konwertowane na nchar i nvarchar, co podwaja ilość miejsca wymaganego dla dotkniętych kolumn. Oryginalne metadane są zachowywane, a wartości są konwertowane z powrotem na ich oryginalne char i varchar typ danych podczas zbiorczego importowania do kolumny tabeli.

Opcje poleceń dla formatu natywnego Unicode

Dane w formacie natywnym Unicode można zaimportować do tabeli przy użyciu narzędzia bcp, BULK INSERT lub OPENROWSET BULK.

  • W przypadku polecenia bcp lub instrukcji BULK INSERT można określić format danych w instrukcji .
  • W przypadku instrukcji OPENROWSET BULK należy określić format danych w pliku formatu.

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

Polecenie Opcja Opis
bcp -N bcp Powoduje użycie natywnego formatu Unicode, który korzysta z natywnych (bazy danych) typów danych dla wszystkich danych niezawierających znaków oraz formatu danych znakowych Unicode dla wszystkich danych znakowych (char, nchar, varchar, nvarchar, text i ntext).
BULK INSERT DATAFILETYPE ='widenative' Używa formatu natywnego Unicode podczas zbiorczego importowania danych.
OPENROWSET N/A Musi używać pliku formatu

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 temacie są oparte na przykładowej tabeli myWidenative i pliku myWidenative.fmtformatu . Zastąp lokalne ścieżki plików lokalną ścieżką pliku w systemie.

Przykładowa tabela

Poniższy skrypt tworzy testową bazę danych, tabelę o nazwie myWidenative i wypełnia tabelę kilkoma początkowymi wartościami. Wykonaj następujące polecenie Transact-SQL:

CREATE DATABASE TestDatabase;
GO

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

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

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

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ć szczegółowe informacje, zapoznaj się z tematem Używanie plików formatu innego niż XML (SQL Server). Następujące polecenie użyje narzędzia bcp do wygenerowania pliku formatu innego niż xml, myWidenative.fmt, na podstawie schematu myWidenative.

  • 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.
  • c służy do określania danych znaków
  • T służy do określania zaufanego połączenia przy użyciu zintegrowanych zabezpieczeń.

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

bcp TestDatabase.dbo.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

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

Ważny

Upewnij się, że plik w formacie innym niż XML kończy się sekwencją znaków powrotu karetki i nowej 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 bazy danych i plików formatów utworzonych powyżej.

Eksportowanie danych przy użyciu formatu natywnego bcp i Unicode

Przełącznik -N 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 polecenia:

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

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

Użycie natywnego formatu bcp i Unicode do importowania danych bez pliku formatu

Przełącznik -N i polecenie IN.

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

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

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

Używanie formatu natywnego bcp i Unicode do importowania danych z plikiem formatu innego niż XML

Przełączniki -N i -f oraz polecenie IN.

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

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

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

REM Review results is SSMS

Używanie formatu natywnego BULK INSERT i Unicode bez pliku formatu

Argument DATAFILETYPE.

Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS).

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

BULK INSERT TestDatabase.dbo.myWidenative
    FROM 'D:\BCP\myWidenative.bcp'
    WITH (DATAFILETYPE = 'widenative' );

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

Używanie formatu natywnego BULK INSERT i Unicode z plikiem formatu innego niż XML

Argument FORMATFILE.

Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS).

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

BULK INSERT TestDatabase.dbo.myWidenative
   FROM 'D:\BCP\myWidenative.bcp'
   WITH ( FORMATFILE = 'D:\BCP\myWidenative.fmt'  );

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

Używanie formatu natywnego OPENROWSET i Unicode z plikiem formatu innego niż XML

Argument FORMATFILE.

Wykonaj polecenie Transact-SQL w programie Microsoft SQL Server Management Studio (SSMS).

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

INSERT INTO TestDatabase.dbo.myWidenative
SELECT * FROM OPENROWSET (
    BULK 'D:\BCP\myWidenative.bcp',
    FORMATFILE = 'D:\BCP\myWidenative.fmt'
) AS t1;

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

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