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


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

Собственный формат данных рекомендуется использовать при массовой передаче данных между несколькими экземплярами 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)