Использование символьного формата для импорта или экспорта данных (SQL Server)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
Символьный формат рекомендуется применять при выполнении массового экспорта данных в текстовый файл, который предназначен для использования в других программах, а также при выполнении массового импорта данных из текстового файла, созданного другими программами.
В символьном формате все столбцы представлены в формате символьных данных. Хранение сведений в формате символов полезно, если данные используются с другой программой, например электронной таблицей, или когда данные необходимо скопировать в экземпляр SQL Server из другого поставщика баз данных, например Oracle.
Примечание.
При массовой передаче данных между экземплярами Microsoft SQL Server и файлом данных содержит символьные данные Юникода, но не расширенные или символы DBCS, используйте формат символов Юникода. Дополнительные сведения см. в разделе Использование символьного формата Юникод для импорта и экспорта данных (SQL Server).
Замечания по использованию символьного формата
При использовании символьного формата имейте в виду следующее.
По умолчанию программа bcp разделяет символьные поля данных символом табуляции, а записи — символом перевода строки. Сведения об указании альтернативных терминаторов см. в разделе "Указание полей и терминаторов строк" (SQL Server).
По умолчанию перед выполнением массового импорта или экспорта символьных данных выполняются следующие преобразования.
Направление массовой операции Преобразование Экспорт (Export) Преобразует данные в символьное представление. Если это явно запрошено, данные в символьных столбцах преобразуются в требуемую кодовую страницу. Если кодовая страница не указана, символьные данные преобразуются в кодовую страницу изготовителя оборудования (OEM) клиентского компьютера. Import Если необходимо, преобразует символьные данные в собственное представление, а также преобразует данные из кодовой страницы клиента в кодовую страницу целевого столбца. Чтобы предотвратить потерю дополнительных символов при преобразовании, применяйте символьный формат Юникода либо укажите кодовую страницу.
Значения типа sql_variant сохраняются в файле в символьном формате без метаданных. Каждое значение типа данных преобразуется в формат типа char в соответствии с правилами неявного преобразования данных. В столбец типа sql_variant данные импортируются как тип char. При импорте в столбец типа данных, отличного от типа sql_variant, данные преобразуются из типа char в соответствии с правилами неявного преобразования. Дополнительные сведения о преобразовании данных см. в разделе "Преобразование типов данных" (ядро СУБД).
Программа bcp экспортирует значения money в символьный формат с четырьмя знаками после запятой и без символов-разделителей групп разрядов, таких как запятая. Например: для столбца типа money , содержащего значение 1 234 567,123456, будет выполнен массовый экспорт в файл данных в виде символьной строки "1234567,1235".
Параметры команд для символьного формата
Данные формата символов можно импортировать в таблицу с помощью bcp, BULK INSERT или INSERT ... SELECT * FROM OPENROWSET(BULK...). Для команды bcp или инструкции BULK INSERT можно указать формат данных в инструкции. Для инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...) нужно указать формат данных в файле форматирования.
Символьный формат поддерживается следующими параметрами командной строки:
Команда | Вариант | Описание |
---|---|---|
bcp | -c | Предписывает служебной программе bcp использовать символьные данные. * |
BULK INSERT | DATAFILETYPE ='char' | Использует символьный формат при массовом импорте данных. |
OPENROWSET | Н/П | Требуется использовать файл форматирования. |
*Чтобы загрузить данные символов (-c) в формат, совместимый с более ранними версиями клиентов SQL Server, используйте параметр -V . Дополнительные сведения см. в разделе Импорт данных в собственном и символьном формате из предыдущих версий SQL Server.
Примечание.
Также в файле форматирования можно указать форматирование для каждого поля. Дополнительные сведения см. в статье Файлы форматирования для импорта или экспорта данных (SQL Server).
Пример условий теста
Примеры в этой статье основаны на таблице и файле форматирования, которые определены ниже.
Образец таблицы
Приведенный ниже скрипт создает тестовую базу данных, таблицу с именем myChar
и заполняет таблицу начальными значениями. Выполните следующий код Transact-SQL в Microsoft SQL Server Management Studio (SSMS):
CREATE DATABASE TestDatabase;
GO
USE TestDatabase;
CREATE TABLE dbo.myChar (
PersonID smallint NOT NULL,
FirstName varchar(25) NOT NULL,
LastName varchar(30) NOT NULL,
BirthDate date,
AnnualSalary money
);
-- Populate table
INSERT TestDatabase.dbo.myChar
VALUES
(1, 'Anthony', 'Grosse', '1980-02-23', 65000.00),
(2, 'Alica', 'Fatnowna', '1963-11-14', 45000.00),
(3, 'Stella', 'Rossenhain', '1992-03-02', 120000.00);
-- Review Data
SELECT * FROM TestDatabase.dbo.myChar;
Образец файла форматирования в формате, отличном от XML
SQL Server поддерживает два типа файлов форматирования: файлы форматирования в формате, отличном от XML, и XML-файлы форматирования. Файл форматирования не в формате XML поддерживается более ранними версиями SQL Server. Дополнительные сведения см. в разделе Файлы формата, отличные от XML (SQL Server) . Следующая команда будет использовать служебную программу bcp для создания файла форматирования myChar.fmt
в формате, отличном от XML, на основе схемы myChar
. Чтобы создать файл форматирования с помощью служебной программы bcp , укажите аргумент format , а вместо пути файла данных задайте значение nul . Параметр format также требует наличия параметра -f . Кроме того, в этом примере квалификатор c используется для указания символьных данных, а T используется для указания доверенного подключения, в рамках которого применяется встроенная система безопасности. В командной строке введите следующую команду:
bcp TestDatabase.dbo.myChar format nul -f D:\BCP\myChar.fmt -T -c
REM Review file
Notepad D:\BCP\myChar.fmt
Внимание
Убедитесь, что файл форматирования не в формате XML заканчивается символом перевода строки или возврата каретки. В противном случае, скорее всего, появится следующее сообщение об ошибке:
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file
Примеры
В приведенных ниже примерах используется база данных и файлы форматирования, созданные ранее.
Использование bcp и символьного формата для экспорта данных
Параметр-c и команда OUT . Примечание. Файл данных, созданный в этом примере, будет использоваться во всех последующих примерах. В командной строке введите следующую команду:
bcp TestDatabase.dbo.myChar OUT D:\BCP\myChar.bcp -T -c
REM Review results
NOTEPAD D:\BCP\myChar.bcp
Использование bcp и символьного формата для импорта данных без файла форматирования
Параметр-c и команда IN . В командной строке введите следующую команду:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"
REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -T -c
REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"
Использование bcp и символьного формата для импорта данных с файлом форматирования, не являющимся XML
Параметры-c и -f switches и IN commи. В командной строке введите следующую команду:
REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myChar;"
REM Import data
bcp TestDatabase.dbo.myChar IN D:\BCP\myChar.bcp -f D:\BCP\myChar.fmt -T
REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myChar;"
Использование инструкции BULK INSERT и символьного формата без файла форматирования
АргументDATAFILETYPE . Выполните следующий код Transact-SQL в Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
FROM 'D:\BCP\myChar.bcp'
WITH (
DATAFILETYPE = 'Char'
);
-- review results
SELECT * FROM TestDatabase.dbo.myChar;
Использование инструкции BULK INSERT и символьного формата с файлом форматирования, не являющимся XML
АргументFORMATFILE . Выполните следующий код Transact-SQL в Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
BULK INSERT TestDatabase.dbo.myChar
FROM 'D:\BCP\myChar.bcp'
WITH (
FORMATFILE = 'D:\BCP\myChar.fmt'
);
-- review results
SELECT * FROM TestDatabase.dbo.myChar;
Использование инструкции OPENROWSET и символьного формата с файлом форматирования, не являющимся XML
АргументFORMATFILE . Выполните следующий код Transact-SQL в Microsoft SQL Server Management Studio (SSMS):
TRUNCATE TABLE TestDatabase.dbo.myChar; -- for testing
INSERT INTO TestDatabase.dbo.myChar
SELECT *
FROM OPENROWSET (
BULK 'D:\BCP\myChar.bcp',
FORMATFILE = 'D:\BCP\myChar.fmt'
) AS t1;
-- review results
SELECT * FROM TestDatabase.dbo.myChar;
Связанные задачи
Использование форматов данных для массового импорта или экспорта
Импорт данных в собственном и символьном формате из предыдущих версий SQL Server
Использование собственного формата для импорта или экспорта данных (SQL Server)
Использование символьного формата Юникода для импорта и экспорта данных (SQL Server)
Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)
См. также
bcp Utility
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Типы данных (Transact-SQL)
Импорт данных в собственном и символьном формате из предыдущих версий SQL Server