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

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Символьный формат рекомендуется применять при выполнении массового экспорта данных в текстовый файл, который предназначен для использования в других программах, а также при выполнении массового импорта данных из текстового файла, созданного другими программами.

В символьном формате все столбцы представлены в формате символьных данных. Хранение данных в символьном формате удобно в том случае, когда данные используются в других программах (например электронных таблицах) или когда на экземпляр SQL Server необходимо перенести данные из базы данных другого поставщика (например Oracle).

Примечание

При массовой передаче данных между экземплярами Microsoft SQL Server и файл данных содержит символьные данные Юникода, но не расширенные символы или символы DBCS, используйте символьный формат Юникода. Дополнительные сведения см. в разделе Использование символьного формата Юникод для импорта и экспорта данных (SQL Server).

В этом разделе.
Замечания по использованию символьного формата
Параметры команд для символьного формата
Пример условий теста
 ● Пример таблицы
 ● Пример файла форматирования в формате, отличном от XML
Примеры
 ● Использование bcp и символьного формата для экспорта данных
 ● Использование bcp и символьного формата для импорта данных без файла форматирования
 ● Использование bcp и символьного формата для импорта данных с помощью файла форматирования, отличного от XML
 ● Использование инструкции BULK INSERT и символьного формата без файла форматирования
 ● Использование инструкции BULK INSERT и символьного формата с файлом форматирования в формате, отличном от XML
 ● Использование OPENROWSET и символьного формата с файлом форматирования в формате, отличном от XML
Связанные задачи

Замечания по использованию символьного формата

При использовании символьного формата имейте в виду следующее.

  • По умолчанию программа bcp разделяет символьные поля данных символом табуляции, а записи — символом перевода строки. Сведения о том, как указать альтернативные признаки конца, см. в разделе Указание признаков конца поля и строки (SQL Server).

  • По умолчанию перед выполнением массового импорта или экспорта символьных данных выполняются следующие преобразования.

    Направление массовой операции Преобразование
    Экспорт Преобразует данные в символьное представление. Если это явно запрошено, данные в символьных столбцах преобразуются в требуемую кодовую страницу. Если кодовая страница не указана, символьные данные преобразуются в кодовую страницу изготовителя оборудования (OEM) клиентского компьютера.
    Импорт Если необходимо, преобразует символьные данные в собственное представление, а также преобразует данные из кодовой страницы клиента в кодовую страницу целевого столбца.
  • Чтобы предотвратить потерю дополнительных символов при преобразовании, применяйте символьный формат Юникода либо укажите кодовую страницу.

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

Символьный формат поддерживается следующими параметрами командной строки:

Get-Help Параметр Описание
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;

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

См. также:

Программа bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Типы данных (Transact-SQL)
Импорт данных в собственном и символьном формате из предыдущих версий SQL Server