Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
применяется к:SQL Server
Базе данных SQL Azure
Управляемому экземпляру SQL Azure
Azure Synapse Analytics
Warehouse в Microsoft Fabric
Символьный формат рекомендуется применять при выполнении массового экспорта данных в текстовый файл, который предназначен для использования в других программах, а также при выполнении массового импорта данных из текстового файла, созданного другими программами.
Формат символов использует символьный формат данных для всех столбцов. Хранение сведений в формате символов полезно, если данные используются с другой программой, например электронной таблицей, или когда данные необходимо скопировать в экземпляр SQL Server из другого поставщика баз данных, например Oracle.
Примечание.
При массовой передаче данных между экземплярами Microsoft SQL Server и в файле данных содержатся символьные данные Юникода, но не содержатся расширенные символы или символы DBCS, используйте формат символов Юникода. Дополнительные сведения см. в разделе Использование символьного формата юникода для импорта или экспорта данных (SQL Server).
Рекомендации по использованию формата символов
При использовании формата символов рассмотрите следующее:
По умолчанию программа bcp разделяет символьные поля данных символом табуляции, а записи — символом перевода строки. Сведения об указании альтернативных терминаторов см. в разделе "Указание полей и терминаторов строк" (SQL Server).
По умолчанию перед выполнением массового импорта или экспорта символьных данных выполняются следующие преобразования.
Направление массовой операции Преобразование Экспорт (Export) Преобразует данные в символьное представление. Если это явно запрошено, данные в символьных столбцах преобразуются в требуемую кодовую страницу. Если кодовая страница не указана, символьные данные преобразуются с использованием OEM-кодовой страницы клиентского компьютера. Импорт Преобразует данные символов в собственное представление, при необходимости и преобразует символьные данные из кодовой страницы клиента на кодовую страницу одного или нескольких целевых столбцов. Чтобы предотвратить потерю дополнительных символов при преобразовании, применяйте символьный формат Юникода либо укажите кодовую страницу.
Значения типа sql_variant сохраняются в файле в символьном формате без метаданных. Каждое значение типа данных преобразуется в формат типа char в соответствии с правилами неявного преобразования данных. Данные импортируются в столбец типа sql_variant как char. При импорте в столбец типа данных, отличного от типа sql_variant, данные преобразуются из типа char в соответствии с правилами неявного преобразования. Дополнительные сведения о преобразовании данных см. в разделе преобразования типов данных (механизм базы данных).
Программа bcp экспортирует значения money в символьный формат с четырьмя знаками после запятой и без символов-разделителей групп разрядов, таких как запятая. Например, столбец денег , содержащий значение
1,234,567.123456
, экспортируется массово в файл данных в виде строкового выражения1234567.1235
.
Параметры команд для формата символов
Данные формата символов можно импортировать в таблицу с помощью bcp, BULK INSERT (Transact-SQL) или OPENROWSET (Transact-SQL). Для команды bcp или BULK INSERT (Transact-SQL) инструкции можно указать формат данных в инструкции. Для инструкции OPENROWSET (Transact-SQL) необходимо указать формат данных в файле формата.
Символьный формат поддерживается следующими параметрами командной строки:
Команда | Вариант | Описание |
---|---|---|
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 для создания файла форматирования, отличного от XML, myChar.fmt
на основе схемы myChar
. Чтобы использовать команду bcp для создания файла форматирования, укажите аргумент FORMAT
и используйте nul
вместо пути к файлу данных. Для параметра форматирования также требуется параметр -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
и команда 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 -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)