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