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

Собственный формат данных рекомендуется использовать при массовой передаче данных между несколькими экземплярами SQL Server через файл данных, который не содержит символов в расширенной кодировке или символов в двухбайтовой кодировке (DBCS).

ПримечаниеПримечание

При массовой передаче данных между несколькими экземплярами SQL Server при помощи файла данных, содержащего символы в расширенной кодировке или символы DBCS, необходимо использовать собственный формат в Юникоде. Дополнительные сведения см. в разделе Использование собственного формата Юникода для импорта или экспорта данных (SQL Server).

В собственном формате используются собственные типы данных базы данных. Собственный формат предназначен для высокоскоростной передачи данных между таблицами SQL Server. Если используется файл форматирования, то исходная и целевая таблицы не обязаны быть идентичными. Передача данных происходит в два этапа:

  1. Массовый экспорт данных из исходной таблицы в файл данных.

  2. Массовый импорт данных из файла данных в целевую таблицу.

Использование собственного формата между идентичными таблицами позволяет избежать бесполезного преобразования типов данных из символьного формата и обратно, экономя тем самым время и пространство хранения. Для достижения оптимальной скорости передачи, однако, уменьшается количество проверок форматирования данных. Чтобы избежать проблемы с загруженными данными, изучите следующий список ограничений.

Ограничения

Чтобы успешно импортировать данные в собственный формат, убедитесь, что:

  • Файл данных создан в собственном формате.

  • Либо целевая таблица должна быть совместима с файлом данных (иметь верное число столбцов, типы данных, длину, допустимость значений NULL и так далее), либо необходимо использовать файл форматирования для сопоставления каждого поля с соответствующим столбцом.

    ПримечаниеПримечание

    Если импортируются данные из файла, не совпадающего по структуре с целевой таблицей, то, хотя операция импорта может завершиться успешно, вставляемые в целевую таблицу данные, скорее всего, будут неправильными. Это происходит из-за того, что данные из файла интерпретируются при помощи формата целевой таблицы. Таким образом, любые различия приведут к вставке неправильных данных. Однако ни при каких обстоятельствах подобные различия не могут привести к логическому или физическому несоответствию в базе данных.

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

Успешный импорт не приводит к повреждению целевой таблицы.

Как bcp обрабатывает данные в собственном формате

В этом разделе обсуждаются особые аспекты выполнения программой bcp операций экспорта и импорта данных в собственном формате.

  • Несимвольные данные.

    Программа bcp использует для записи несимвольных данных из таблицы в файл данных внутренний двоичный формат данных SQL Server.

  • Данные типа char или varchar.

    В начале каждого поля char или varchar программа bcp добавляет длину префикса.

    Важное примечаниеВажно!

    По умолчанию при использовании собственного режима программа bcp перед копированием в файл данных преобразует символы из формата SQL Server в символы OEM. Программа bcp преобразует символы из файла данных в символы ANSI перед их массовым импортом в таблицу SQL Server. Во время подобных преобразований расширенные символьные данные могут быть потеряны. Для расширенных наборов символов необходимо либо использовать собственный формат в Юникоде, либо задать кодовую страницу.

  • Данные sql_variant.

    Если данные типа sql_variant сохраняются как SQLVARIANT в файле данных в собственном формате, то все характеристики данных сохраняются. Метаданные, в которых записан тип данных каждой величины, записываются вместе со значениями данных. Эти метаданные используются для повторного создания значений данных с тем же типом данных, как и в столбце назначения sql_variant.

    Если в столбце назначения тип данных отличается от sql_variant, то каждое значение данных преобразуется в тип данных столбца назначений согласно стандартным правилам неявного преобразования данных. При возникновении ошибки во время преобразования данных происходит откат текущего пакета. С любыми значениями char и varchar, которые передаются между столбцами sql_variant, могут возникнуть проблемы преобразования кодовых страниц.

    Дополнительные сведения о преобразовании данных см. в разделе Преобразование типов данных (компонент Database Engine).

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

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

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

Команда

Параметр

Описание

bcp

-n

Приводит к использованию программой bcp собственных типов данных.1

BULK INSERT

DATAFILETYPE = 'native'

Использует собственный тип данных или расширенный собственный тип данных. Учтите, что параметр DATAFILETYPE не нужен, если типы данных указываются в файле форматирования.

1 Для преобразования собственных (-n) данных в совместимый с предыдущими версиями клиентов SQL Server формат используйте ключ -V. Дополнительные сведения см. в разделе Импорт данных в собственном и символьном формате из предыдущих версий SQL Server.

Дополнительные сведения см. в разделе Программа bcp, BULK INSERT (Transact-SQL) или OPENROWSET (Transact-SQL).

ПримечаниеПримечание

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

Примеры

В следующих примерах показан массовый экспорт данных в собственном формате с помощью программы bcp, а также массовый импорт тех же данных с помощью инструкции BULK INSERT.

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

Для данного примера необходимо, чтобы таблица myTestNativeData существовала в образце базы данных AdventureWorks в схеме dbo. Перед выполнением примеров следует создать эту таблицу. В редакторе запросов среды Среда SQL Server Management Studio выполните:

USE AdventureWorks;
GO
CREATE TABLE myTestNativeData (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50)
   ); 

Чтобы заполнить эту таблицу и просмотреть результирующее содержимое, выполните следующие инструкции:

INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(1,'DataField2','DataField3');
INSERT INTO myTestNativeData(Col1,Col2,Col3)
   VALUES(2,'DataField2','DataField3');
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData

Массовый экспорт собственных данных с помощью программы bcp

Для экспорта данных из таблицы в файл данных используйте bcp с параметром out и следующими квалификаторами:

Квалификаторы

Описание

-n

Указывает собственные типы данных.

-T

Указывает, что программа bcp устанавливает доверительное соединение с SQL Server с использованием встроенной безопасности. Если параметр -T не указан, для входа необходимо указать -U и -P.

В следующем примере показан массовый экспорт данных в собственном формате из таблицы myTestNativeData в новый файл данных с именем myTestNativeData-n.Dat. В командной строке Microsoft Windows введите:

bcp AdventureWorks..myTestNativeData out C:\myTestNativeData-n.Dat -n -T

Массовый импорт собственных данных с помощью инструкции BULK INSERT

В следующем примере с помощью инструкции BULK INSERT выполняется импорт данных из файла данных myTestNativeData-n.Dat в таблицу myTestNativeData. В редакторе запросов среды Среда SQL Server Management Studio выполните:

USE AdventureWorks;
GO
BULK INSERT myTestNativeData 
    FROM 'C:\myTestNativeData-n.Dat' 
   WITH (DATAFILETYPE='native'); 
GO
SELECT Col1,Col2,Col3 FROM myTestNativeData
GO

Связанные задачи

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

См. также

Справочник

Программа bcp

BULK INSERT (Transact-SQL)

Типы данных (Transact-SQL)

sql_variant (Transact-SQL)

OPENROWSET (Transact-SQL)

Основные понятия

Импорт данных в собственном и символьном формате из предыдущих версий SQL Server

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