Использование собственного формата для импорта или экспорта данных
Собственный формат данных рекомендуется использовать при массовой передаче данных между несколькими экземплярами SQL Server через файл данных, который не содержит символов в расширенной кодировке или символов в двухбайтовой кодировке (DBCS).
Примечание |
---|
При массовой передаче данных между несколькими экземплярами SQL Server при помощи файла данных, содержащего символы в расширенной кодировке или символы DBCS, необходимо использовать собственный формат в Юникоде. Дополнительные сведения см. в разделе Использование собственного формата Юникода для импорта или экспорта данных (SQL Server). |
В собственном формате используются собственные типы данных базы данных. Собственный формат предназначен для высокоскоростной передачи данных между таблицами SQL Server. Если используется файл форматирования, то исходная и целевая таблицы не обязаны быть идентичными. Передача данных происходит в два этапа:
Массовый экспорт данных из исходной таблицы в файл данных.
Массовый импорт данных из файла данных в целевую таблицу.
Использование собственного формата между идентичными таблицами позволяет избежать бесполезного преобразования типов данных из символьного формата и обратно, экономя тем самым время и пространство хранения. Для достижения оптимальной скорости передачи, однако, уменьшается количество проверок форматирования данных. Чтобы избежать проблемы с загруженными данными, изучите следующий список ограничений.
Ограничения
Чтобы успешно импортировать данные в собственный формат, убедитесь, что:
Файл данных создан в собственном формате.
Либо целевая таблица должна быть совместима с файлом данных (иметь верное число столбцов, типы данных, длину, допустимость значений 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
Связанные задачи
Использование форматов данных для массового импорта или экспорта
Импорт данных в собственном и символьном формате из предыдущих версий SQL Server
Использование символьного формата для импорта и экспорта данных (SQL Server)
Использование символьного формата Юникода для импорта и экспорта данных (SQL Server)
Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)
См. также
Справочник
Основные понятия
Импорт данных в собственном и символьном формате из предыдущих версий SQL Server
Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)