Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо:SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
Формат символов Юникода рекомендуется для массовой передачи данных между несколькими экземплярами SQL Server с помощью файла данных, содержащего расширенные или dbCS символы. Формат символьных данных Юникода позволяет экспортировать данные с сервера с помощью кодовой страницы, которая отличается от кодовой страницы, используемой клиентом, выполняющим операцию. В этих случаях использование символьного формата Юникода имеет следующие преимущества.
Если данные источника и назначения имеют тип данных Юникода, при использовании символьного формата Юникода все символьные данные сохраняются.
Если исходные и целевые данные не являются типами данных Юникода, использование формата символов Юникода сводит к минимуму потерю расширенных символов в исходных данных, которые не могут быть представлены в назначении.
Рекомендации по использованию формата символов Юникода
При использовании формата символов Юникода рассмотрите следующее:
По умолчанию программа bcp разделяет символьные поля данных символом табуляции, а записи — символом перевода строки. Сведения об указании альтернативных терминаторов см. в разделе "Указание полей и терминаторов строк" (SQL Server).
Данные типа sql_variant , хранящиеся в файле данных символьного формата Юникод, обрабатываются таким же образом, что и данные файла данных символьного формата, за исключением того, что они хранятся как данные типа данных nchar , а не как данные типа char . Дополнительные сведения о формате символов см. в разделе о поддержке сортировки и Юникода.
Особые рекомендации по использованию формата символов Юникода, bcp и файла форматирования
Файлы данных символьного формата Юникода следуют соглашениям для файлов Юникода. Первые два байта файла являются шестнадцатеричными числами 0xFFFE. Эти байты служат в качестве меток порядка байтов, определяющих, хранится ли старший байт в файле первым или последним. Служебная программа bcp может неправильно ознакомиться с BOM и привести к сбою части процесса импорта; Может появиться сообщение об ошибке следующим образом:
Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification
BOM может быть неправильно интерпретирован в следующих условиях:
Используется служебная программа bcp, а
-w
переключатель используется для указания символа Юникодаиспользуется файл форматирования;
первое поле в файле данных не содержит символы.
Рассмотрим, может ли любой из следующих обходных решений быть доступным для конкретной ситуации:
Не используйте файл форматирования. Пример этого обходного решения представлен в использовании формата символов bcp и Юникод для импорта данных без использования файла формата.
Используйте переключатель
-c
вместо-w
,Повторно экспортируйте данные, используя собственный формат.
Используйте BULK INSERT (Transact-SQL) или OPENROWSET (Transact-SQL). Примеры этих обходных решений приведены в разделах Использование BULK INSERT и формат Юникода с файлом формата, отличным от XML и Использование OPENROWSET и формат Юникода с файлом формата, отличным от XML.
Вручную вставьте первую запись в целевую таблицу, а затем используйте
-F 2
переключатель для запуска импорта во второй записи.Вручную вставьте фиктивную первую запись в файл данных, а затем используйте
-F 2
параметр, чтобы начать импорт со второй записи. Пример этого обходного решения представлен в разделе Использование форматирования символов bcp и Unicode для импорта данных с файлом формата, отличным от XML.Используйте промежуточную таблицу, в которой первый столбец имеет символьный тип данных, или
Повторно экспортируйте данные и измените порядок полей данных, чтобы первое поле данных было символом. После этого используйте файл форматирования для повторного сопоставления поля данных с фактическим порядком в таблице. Пример см. в разделе "Использование файла форматирования" для сопоставления столбцов таблиц с полями файлов данных (SQL Server).
Параметры команд для формата символов Юникода
Данные формата символов Юникода можно импортировать в таблицу с помощью bcp, BULK INSERT или OPENROWSET. Для команды bcp или инструкции BULK INSERT можно указать формат данных в инструкции. Для инструкции OPENROWSET необходимо указать формат данных в файле формата.
Символьный формат Юникода поддерживается следующими параметрами командной строки:
Команда | Вариант | Описание |
---|---|---|
bcp |
-w |
Использует символьный формат Юникода. |
BULK INSERT |
DATAFILETYPE ='widechar' |
Использует символьный формат Юникода при массовом импорте данных. |
OPENROWSET |
Н/П | Требуется использовать файл форматирования. |
Примечание.
Также в файле форматирования можно указать форматирование для каждого поля. Дополнительные сведения см. в разделе форматирования файлов для импорта или экспорта данных (SQL Server).
Пример условий теста
Примеры в этой статье основаны на следующей таблице и файле форматирования.
Пример таблицы
Следующий скрипт создает тестовую базу данных, таблицу с именем myWidechar
и заполняет таблицу некоторыми начальными значениями. Выполните следующий код Transact-SQL в 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;
Пример файла форматирования в формате, отличном от XML
SQL Server поддерживает два типа файлов форматирования: файлы форматирования в формате, отличном от XML, и XML-файлы форматирования. Файл форматирования не в формате XML поддерживается более ранними версиями SQL Server. Дополнительные сведения см. в разделе "Использование файлов форматирования, отличных от XML(SQL Server)".
Следующая команда использует служебную программу bcp для создания файла формата, отличного от XML, myWidechar.fmt
на основе схемы myWidechar
. Чтобы использовать команду bcp для создания файла форматирования, укажите аргумент format
и используйте nul
вместо пути к файлу данных. Для параметра форматирования также требуется параметр -f
. Кроме того, в этом примере квалификатор c
используется для указания символьных данных, а T
используется для указания надежного подключения с помощью интегрированной безопасности. В командной строке введите следующие команды:
bcp TestDatabase.dbo.myWidechar format nul -f D:\BCP\myWidechar.fmt -T -w
REM Review file
Notepad D:\BCP\myWidechar.fmt
Внимание
Убедитесь, что файл форматирования не в формате XML заканчивается символом перевода строки или возврата каретки. В противном случае может появиться следующее сообщение об ошибке:
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
Примеры
В следующих примерах используется база данных и файлы форматирования, созданные ранее.
Использование формата символов bcp и Юникода для экспорта данных
-w
переключатель и команда OUT
. Файл данных, созданный в этом примере, используется во всех последующих примерах. В командной строке введите следующие команды:
bcp TestDatabase.dbo.myWidechar OUT D:\BCP\myWidechar.bcp -T -w
REM Review results
NOTEPAD D:\BCP\myWidechar.bcp
Использование формата символов bcp и Юникода для импорта данных без файла форматирования
-w
переключатель и команда IN
. В командной строке введите следующие команды:
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
Используйте формат символов bcp и Юникода для импорта данных с использованием файла нефайлового формата XML.
-w
и -f
переключатели и команда IN
. Необходимо использовать обходное решение, поскольку в этом примере задействованы bcp, файл формата, символ Юникода, и первое поле в файле данных не является символьным. См. особенности использования формата символов Юникода, bcp и файла форматирования ранее в статье. Файл данных myWidechar.bcp
изменяется путем добавления дополнительной записи в виде "фиктивной" записи, которая затем игнорируется с помощью этого переключателя -F 2
.
В командной строке введите следующие команды и внесите требуемые изменения:
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
Используйте BULK INSERT и формат символов Юникода без файла форматирования
DATAFILETYPE
аргумент. Выполните следующий код Transact-SQL в 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;
Используйте BULK INSERT и формат символов Юникода с файлом форматирования, отличающимся от XML
FORMATFILE
аргумент. Выполните следующий код Transact-SQL в 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;
Используйте OPENROWSET и формат символов Юникода с файлом формата, отличающегося от XML
FORMATFILE
аргумент. Выполните следующий код Transact-SQL в 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;
Связанные задачи
Использование форматов данных для массового импорта или экспорта
- Импорт данных собственного и символьного формата из более ранних версий SQL Server
- Использование формата символов для импорта или экспорта данных (SQL Server)
- Использование собственного формата для импорта или экспорта данных (SQL Server)
- Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)