Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Собственный формат данных рекомендуется использовать во время массовой передачи данных между несколькими экземплярами Microsoft SQL Server при помощи файла данных, не содержащего символы в расширенной кодировке или символы в двухбайтовой кодировке (DBCS).
Примечание. |
|---|
| При массовой передаче данных между несколькими экземплярами SQL Server при помощи файла данных, содержащего символы в расширенной кодировке или символы DBCS, необходимо использовать собственный формат в Юникоде. Дополнительные сведения см. в разделе Использование собственного формата Юникода для импорта или экспорта данных. |
В собственном формате используются собственные типы данных базы данных. Собственный формат предназначен для высокоскоростной передачи данных между таблицами SQL Server. Если используется файл форматирования, то исходная и целевая таблицы не обязаны быть идентичными. Передача данных происходит в два этапа:
- Массовый экспорт данных из исходной таблицы в файл данных.
- Массовый импорт данных из файла данных в целевую таблицу.
Использование собственного формата между идентичными таблицами позволяет избежать бесполезного преобразования типов данных из символьного формата и обратно, экономя тем самым время и пространство хранения. Для достижения оптимальной скорости передачи, однако, уменьшается количество проверок форматирования данных. Чтобы избежать проблемы с загруженными данными, изучите следующий список ограничений.
Ограничения
Чтобы успешно импортировать данные в собственный формат, убедитесь, что:
- Файл данных создан в собственном формате.
- Либо целевая таблица должна быть совместима с файлом данных (иметь верное число столбцов, типы данных, длину, допустимость значений NULL и так далее), либо необходимо использовать файл форматирования для сопоставления каждого поля с соответствующим столбцом.
Дополнительные сведения об использовании файлов форматирования см. в разделе [Файлы форматирования для импорта или экспорта данных](ms190393\(v=sql.90\).md).
Примечание.Если импортируются данные из файла, не совпадающего по структуре с целевой таблицей, то, хотя операция импорта может завершиться успешно, вставляемые в целевую таблицу данные, скорее всего, будут неправильными. Это происходит из-за того, что данные из файла интерпретируются при помощи формата целевой таблицы. Таким образом, любые различия приведут к вставке неправильных данных. Однако ни при каких обстоятельствах подобные различия не могут привести к логическому или физическому несоответствию в базе данных.
Успешный импорт не приводит к повреждению целевой таблицы.
Как 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
См. также
Основные понятия
Импорт данных в собственном и символьном формате из предыдущих версий SQL Server
Использование данных типа sql_variant
Использование собственного формата Юникода для импорта или экспорта данных
Другие ресурсы
Программа bcp
BULK INSERT (Transact-SQL)
Типы данных (Transact-SQL)
sql_variant (Transact-SQL)
OPENROWSET (Transact-SQL)