Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Format znaków Unicode jest zalecany do zbiorczego transferu danych między wieloma wystąpieniami programu SQL Server przy użyciu pliku danych zawierającego znaki rozszerzone/DBCS. Format danych znaków Unicode umożliwia eksportowanie danych z serwera przy użyciu strony kodowej, która różni się od strony kodowej używanej przez klienta wykonującego operację. W takich przypadkach użycie formatu znaków Unicode ma następujące zalety:
Jeśli dane źródłowe i docelowe są typami danych Unicode, użycie formatu znaków Unicode zachowuje wszystkie dane znaków.
Jeśli dane źródłowe i docelowe nie są typami danych Unicode, użycie formatu znaków Unicode minimalizuje utratę znaków rozszerzonych w danych źródłowych, których nie można przedstawić w miejscu docelowym.
Zagadnienia dotyczące korzystania z formatu znaków Unicode
W przypadku korzystania z formatu znaków Unicode należy wziąć pod uwagę następujące kwestie:
Domyślnie narzędzie bcp oddziela pola danych zawierających znaki za pomocą znaku tabulatora i kończy rekordy znakiem przejścia do nowego wiersza. Aby uzyskać informacje na temat określania alternatywnych terminatorów, zobacz Określanie terminatorów pól i wierszy (SQL Server).
Dane sql_variant przechowywane w pliku danych formatu znaków Unicode pełnią funkcję w taki sam sposób, jak w innych plikach danych formatu znaków, z wyjątkiem, że dane są przechowywane jako nchar zamiast char. Aby uzyskać więcej informacji na temat formatu znaków, zajrzyj do sekcji Obsługa sortowania i Unicode.
Specjalne zagadnienia dotyczące używania formatu znaków Unicode, narzędzia bcp i pliku formatu
Pliki danych formatu znaków Unicode są zgodne z konwencjami dotyczącymi plików Unicode. Pierwsze dwa bajty pliku to liczby szesnastkowe, 0xFFFE. Te bajty służą jako znaczniki kolejności bajtów (BOM), określając, czy bajt o wysokiej kolejności jest przechowywany jako pierwszy, czy ostatni w pliku. Narzędzie bcp może błędnie interpretować model BOM i spowodować niepowodzenie części procesu importowania; Może zostać wyświetlony komunikat o błędzie podobny do następującego:
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
Model BOM może zostać błędnie zinterpretowany w następujących warunkach:
Narzędzie bcp jest używane, a
-wprzełącznik służy do wskazywania znaku UnicodeUżywany jest plik formatu
Pierwsze pole w pliku danych nie jest znakiem
Zastanów się, czy którekolwiek z następujących obejść może być dostępne w określonej sytuacji:
Nie używaj pliku formatu. Przykładem tego obejścia jest użycie formatu znaków bcp i Unicode do importowania danych bez pliku formatu,
Użyj przełącznika
-czamiast-w,Ponownie wyeksportuj dane przy użyciu formatu natywnego,
Użyj funkcji BULK INSERT (Transact-SQL) lub OPENROWSET (Transact-SQL). Przykłady tych obejść znajdują się w sekcjach Używanie BULK INSERT i format znaków Unicode z plikiem w formacie innym niż XML oraz Używanie OPENROWSET i format znaków Unicode z plikiem w formacie innym niż XML.
Ręcznie wstaw pierwszy rekord w tabeli docelowej, a następnie użyj
-F 2przełącznika, aby rozpocząć importowanie na drugim rekordzie,Ręcznie wstaw fikcyjny pierwszy rekord w pliku danych, a następnie użyj
-F 2przełącznika , aby rozpocząć importowanie na drugim rekordzie. Przykład tego rozwiązania alternatywnego znajduje się w sekcji Wykorzystanie bcp i formatu znaków Unicode do importowania danych z plikiem o formacie innym niż XML.Użyj tabeli przejściowej, w której pierwsza kolumna jest typem danych znaków lub
Ponownie wyeksportuj dane i zmień kolejność pól danych, aby pierwsze pole danych było znakiem. Następnie użyj pliku formatu, aby ponownie zamapować pole danych na rzeczywistą kolejność w tabeli. Aby zapoznać się z przykładem, zobacz Mapowanie kolumn tabeli na pola pliku danych (SQL Server) przy użyciu pliku formatu.
Opcje poleceń dla formatu znaków Unicode
Dane formatu znaków Unicode można zaimportować do tabeli przy użyciu narzędzia bcp, BULK INSERT lub OPENROWSET. W przypadku polecenia bcp lub instrukcji BULK INSERT można określić format danych w instrukcji . W przypadku instrukcji OPENROWSET należy określić format danych w pliku formatu.
Format znaków Unicode jest obsługiwany przez następujące opcje polecenia:
| Polecenie | Opcja | Opis |
|---|---|---|
bcp |
-w |
Używa formatu znaków Unicode. |
BULK INSERT |
DATAFILETYPE ='widechar' |
Używa formatu znaków 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 formatowanie plików do importowania lub eksportowania 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 myWidechar i wypełnia tabelę kilkoma początkowymi wartościami. Wykonaj następujący skrypt Transact-SQL w Microsoft SQL Server Management Studio (SSMS):
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE dbo.myWidechar
(
PersonID SMALLINT NOT NULL,
FirstName NVARCHAR (25) NOT NULL,
LastName NVARCHAR (30) NOT NULL,
BirthDate DATE,
AnnualSalary MONEY
);
-- Populate table
INSERT TestDatabase.dbo.myWidechar
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.myWidechar;
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 Użyj plików w formacie innym niż XML (SQL Server).
Następujące polecenie używa narzędzia bcp do generowania pliku formatu innego niż XML, myWidechar.fmt, na podstawie schematu myWidechar. 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 polecenia:
bcp TestDatabase.dbo.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w
REM Review file
Notepad D:\BCP\myWidechar.fmt
Ważny
Upewnij się, że plik w formacie innym niż XML kończy się znakami powrotu karetki i nowej linii. W przeciwnym razie może zostać 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 sformatowaliśmy wcześniej utworzone pliki.
Eksportowanie danych przy użyciu formatu znaków bcp i Unicode
-w przełącznik i polecenie OUT. Plik danych utworzony w tym przykładzie jest używany we wszystkich kolejnych przykładach. W wierszu polecenia wprowadź następujące polecenia:
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
Używanie formatu znaków bcp i Unicode do importowania danych bez pliku formatu
-w przełącznik i polecenie IN. W wierszu polecenia wprowadź następujące polecenia:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"
REM Import data
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -T -w
REM Review results is SSMS
Używanie formatu znaków bcp i Unicode do importowania danych z plikiem formatu innego niż XML
Przełączniki -w i -f oraz polecenie IN. Potrzeba zastosować obejście, ponieważ ten przykład obejmuje bcp, plik formatu, znak Unicode, a pierwsze pole w pliku danych jest typu nie-znakowego. Zobacz Specjalne zagadnienia dotyczące używania formatu znaków Unicode, narzędzia bcp i pliku formatu we wcześniejszej wersji artykułu. Plik danych myWidechar.bcp jest zmieniany przez dodanie dodatkowego rekordu 'fikcyjnego', który następnie jest pomijany za pomocą przełącznika -F 2.
W wierszu polecenia wprowadź następujące polecenia i wykonaj kroki modyfikacji:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidechar;"
REM Open data file
Notepad D:\BCP\myWidechar.bcp
REM Copy first record and then paste as new first record. This additional record is the "dummy" record.
REM Close file.
REM Import data instructing bcp to skip dummy record with the -F 2 switch.
bcp TestDatabase.dbo.myWidechar IN D:\BCP\myWidechar.bcp -f D:\BCP\myWidechar.fmt -T -F 2
REM Review results is SSMS
REM Return data file to original state for usage in other examples
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
Użyj BULK INSERT oraz formatu znaków Unicode bez pliku formatu
DATAFILETYPE argument. Wykonaj następujący skrypt Transact-SQL w Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar FROM 'D:\BCP\myWidechar.bcp'
WITH (DATAFILETYPE = 'widechar');
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
Używanie formatu ZNAKÓW BULK INSERT i Unicode z plikiem formatu innego niż XML
FORMATFILE argument. Wykonaj następujący skrypt Transact-SQL w Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
BULK INSERT TestDatabase.dbo.myWidechar FROM 'D:\BCP\myWidechar.bcp'
WITH (FORMATFILE = 'D:\BCP\myWidechar.fmt');
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
Używanie formatu znaków OPENROWSET i Unicode z plikiem formatu innego niż XML
FORMATFILE argument. Wykonaj następujący skrypt Transact-SQL w Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myWidechar; -- for testing
INSERT INTO TestDatabase.dbo.myWidechar
SELECT * FROM OPENROWSET (
BULK 'D:\BCP\myWidechar.bcp',
FORMATFILE = 'D:\BCP\myWidechar.fmt'
) AS t1;
-- review results
SELECT * FROM TestDatabase.dbo.myWidechar;
Powiązane zadania
Aby używać formatów danych do importowania zbiorczego lub eksportu zbiorczego
- Importowanie danych w formacie natywnym i znakowym z wcześniejszych wersji programu SQL Server
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu natywnego
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu natywnego Unicode
Treści powiązane
- Narzędzie bcp
- MASOWE WSTAWIANIE (Transact-SQL)
- OPENROWSET (Transact-SQL)
- Typy danych (Transact-SQL)
- Obsługa sortowania i Unicode