Поделиться через


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

Применимо:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureAzure Synapse AnalyticsАналитическая платформа System (PDW)

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

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

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

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

Данные собственного формата Юникода можно импортировать в таблицу с помощью bcp, BULK INSERT или OPENROWSET BULK.

  • Для команды bcp или инструкции BULK INSERT можно указать формат данных в инструкции.
  • Для инструкции OPENROWSET BULK необходимо указать формат данных в файле формата.

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

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

Примечание.

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

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

Примеры в этом разделе основаны на примере таблицы myWidenative и файла myWidenative.fmtформатирования. Замените локальные пути к файлам на локальный путь к файлу в системе.

Пример таблицы

Следующий скрипт создает тестовую базу данных, таблицу с именем myWidenative и заполняет таблицу некоторыми начальными значениями. Выполните следующую команду 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;

Пример файла форматирования в формате, отличном от XML

SQL Server поддерживает два типа файлов форматирования: файлы форматирования в формате, отличном от XML, и XML-файлы форматирования. Формат не-XML является исходным форматом, поддерживаемым более ранними версиями SQL Server. Ознакомьтесь с Используйте файлы форматов, отличных от XML (SQL Server) для получения подробной информации. Следующая команда будет использовать служебную программу bcp для создания файла форматирования myWidenative.fmtв формате, отличном от XML, на основе схемы myWidenative.

  • Чтобы использовать команду bcp для создания файла форматирования, укажите аргумент format и используйте nul вместо пути к файлу данных.
  • Для параметра форматирования также требуется параметр -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 и команда 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 -f D:\BCP\myWidenative.fmt -T -N

REM Review results is SSMS

Используйте BULK INSERT и нативный формат Unicode без файла форматирования

Аргумент 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;

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