Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)

Применимо к: даSQL Server (все поддерживаемые версии) ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics даПараллельное хранилище данных

Собственный формат Юникода может быть полезен при копировании данных из одной установки Microsoft SQL Server в другую. Использование собственного формата для несимвольных данных позволяет сэкономить время благодаря исключению ненужных преобразований типов данных в символьный формат и обратно. Использование символьного формата Юникода для всех символьных данных предотвращает потерю дополнительных символов в ходе массовой передачи данных между серверами, использующими различные кодовые страницы. Файл данных в собственном формате Юникода может быть считан с помощью любого метода массового импорта.

Собственный формат Юникода рекомендуется использовать для массовой передачи данных между несколькими экземплярами SQL Server с помощью файла данных, который содержит дополнительный набор символов или символы в кодировке DBCS. В отношении несимвольных данных собственный формат Юникода использует собственные (для базы данных) типы данных. Для символьных данных, таких как char, nchar, varchar, nvarchar, текст, varchar(max), nvarchar(max)и ntext, собственный формат Юникод использует символьный формат Юникод.

Данные типа sql_variant , которые хранятся в виде инструкции SQLVARIANT в файле собственного формата Юникод, функционируют точно так же, как в файле данных собственного формата, за исключением того, что значения типа char и varchar преобразуются в nchar и nvarchar, что требует вдвое больше места для хранения столбцов, подлежащих преобразованию. В процессе массового импорта в столбец таблицы исходные метаданные сохраняются, а значения преобразуются обратно в исходные типы данных char и varchar .

В этом разделе.
Командные параметры для собственного формата Юникода
Пример условий теста
 ● Образец таблицы
 ● Образец файла форматирования в формате, отличном от XML
Примеры
 ● Использование bcp и собственного формата Юникода для экспорта данных
 ● Использование bcp и собственного формата Юникода для импорта данных без файла форматирования
 ● Использование bcp и собственного формата Юникода для импорта данных при помощи файла форматирования, не являющегося XML
 ● Использование инструкции BULK INSERT и собственного формата Юникода без файла форматирования
 ● Использование инструкции BULK INSERT и собственного формата Юникода с файлом форматирования, не являющимся XML
 ● Использование OPENROWSET и собственного формата Юникода с файлом форматирования, не являющимся XML
Связанные задачи

Командные параметры для собственного формата Юникода

Импортировать в таблицу данные в собственном формате Юникода можно при помощи программы bcp, инструкции BULK INSERT или INSERT ... SELECT * FROM OPENROWSET(BULK...). Для команды bcp или инструкции BULK INSERT формат данных можно указать в инструкции. Для инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...) нужно указать формат данных в файле форматирования.

Собственный формат Юникода поддерживается следующими параметрами командной строки:

Get-Help Параметр Описание
bcp -N Заставляет программу bcp использовать собственный формат Юникод, при котором для всех несимвольных данных используются собственные (базы данных) типы данных, а для всех символьных данных (char, nchar, varchar, nvarchar, text и ntext) используется символьный формат Юникод.
BULK INSERT DATAFILETYPE ="widenative" Собственный формат Юникода используется при массовом импорте данных.
OPENROWSET Недоступно Требуется использовать файл форматирования.

Примечание

Также в файле форматирования можно указать форматирование для каждого поля. Дополнительные сведения см в разделе Файлы форматирования для импорта или экспорта данных (SQL Server).

Пример условий теста

Примеры в этой статье основаны на таблице и файле форматирования, которые определены ниже.

Образец таблицы

Приведенный ниже скрипт создает тестовую базу данных, таблицу с именем myWidenative и заполняет таблицу начальными значениями. Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

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;

Образец файла форматирования в формате, отличном от XML

SQL Server поддерживает два типа файлов форматирования: файлы форматирования в формате, отличном от XML, и XML-файлы форматирования. Файл форматирования не в формате XML поддерживается более ранними версиями SQL Server. Дополнительные сведения см. в разделе Файлы формата, отличные от XML (SQL Server) . Следующая команда будет использовать служебную программу bcp для создания файла форматирования myWidenative.fmtв формате, отличном от XML, на основе схемы myWidenative. Чтобы создать файл форматирования с помощью служебной программы bcp , укажите аргумент format , а вместо пути файла данных задайте значение nul . Параметр format также требует наличия параметра -f . Кроме того, в этом примере квалификатор c используется для указания символьных данных, а T используется для указания доверенного подключения, в рамках которого применяется встроенная система безопасности. В командной строке введите следующие команды:

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

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

Важно!

Убедитесь, что файл форматирования не в формате XML заканчивается символом перевода строки или возврата каретки. В противном случае, скорее всего, появится следующее сообщение об ошибке:

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

Примеры

В приведенных ниже примерах используется база данных и файлы форматирования, созданные ранее.

Использование bcp и собственного формата Юникода для экспорта данных

Параметр -N и команда OUT . Примечание. Файл данных, созданный в этом примере, будет использоваться во всех последующих примерах. В командной строке введите следующие команды:

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

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

Использование bcp и собственного формата Юникода для импорта данных без файла форматирования

Параметр -N и команда IN . В командной строке введите следующие команды:

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

Использование bcp и собственного формата Юникода для импорта данных при помощи файла форматирования, не являющегося XML

Параметры -N и -f switches и IN commи. В командной строке введите следующие команды:

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

Использование инструкции BULK INSERT и собственного формата Юникода без файла форматирования

Аргумент DATAFILETYPE . Выполните следующий запрос Transact-SQL в 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;

Использование инструкции BULK INSERT и собственного формата Юникода с файлом форматирования, не являющимся XML

Аргумент FORMATFILE . Выполните следующий запрос Transact-SQL в 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;

Использование OPENROWSET и собственного формата Юникода с файлом форматирования, не являющимся XML

Аргумент FORMATFILE . Выполните следующий запрос Transact-SQL в 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;

Использование форматов данных для массового импорта или экспорта

См. также:

bcp Utility
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Типы данных (Transact-SQL)