Поделиться через


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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics 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).

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

    Направление массовой операции Преобразование
    Экспорт (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;

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

См. также

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