Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Аналитическая платформа система (PDW)
Для символьных полей данных можно использовать необязательные символы, которые позволяют указывать конец каждого поля в файле данных с помощью разделителя поля и конец каждой строки с помощью разделителя строки. Один из способов указать программам, считывающим файл данных, где заканчивается одно поле или строка и начинается другое поле или строка, заключается в использовании завершающих символов.
Внимание
При использовании нативного формата или нативного формата в кодировке Юникод используйте префиксы длины вместо разделителей полей. Данные собственного формата могут конфликтуть с терминаторами, так как файл данных собственного формата хранится в формате внутренних двоичных данных Microsoft SQL Server.
Символы, поддерживаемые в качестве терминаторов
Команда bcp, оператор BULK INSERT
и поставщик массового набора строк OPENROWSET
поддерживают использование различных символов в качестве разделителей полей или строк и всегда ищут первое появление каждого разделителя. В следующей таблице перечислены поддерживаемые символы для разделителей.
Завершающий символ | Обозначается как | Описание |
---|---|---|
Вкладка | \t |
Признак конца поля по умолчанию. |
Символ перевода строки | \n |
Это символ окончания строки по умолчанию. |
Возврат каретки и перевод строки | \r |
|
Обратная косая черта 1 | \ |
|
Терминатор NULL (невидимый терминатор) 2 | \0 |
|
Любой печатный символ (управляющие символы не являются печатными, кроме нулевого символа, табуляции, новой строки и возврата каретки) | (* , A , t , l , и т. д.) |
|
Строка, содержащая до десяти печатных символов, включая некоторые или все из ранее перечисленных терминаторов. | (**\t** , end , !!!!!!!!!! , \t-\n , и т. д.) |
1 Только символы t
, n
, r
, 0
и \0
работают с управляющим символом обратной косой черты, чтобы создать элемент управления.
2 Несмотря на то, что символ элемента управления NULL (\0
) не отображается при печати, это отдельный символ в файле данных. то есть если управляющий символ NULL используется в качестве признака конца поля или строки, то это не то же самое, что и полное отсутствие признака конца.
Внимание
Если в данных встречается символ-ограничитель, он интерпретируется как ограничитель, а не как данные, и данные после этого символа трактуются как принадлежащие следующему полю или записи. Поэтому выбирайте знаки окончания или разделители так, чтобы они никогда не встречались в ваших данных. Например, терминатор с низким суррогатным полем не является хорошим выбором для конца поля, если данные содержат низкое суррогатное значение.
Используйте терминаторы строк
Признаком конца строки может быть тот же символ, что и символ конца последнего поля. Однако, как правило, отдельный терминатор строки полезен. Например, чтобы создать табличные выходные данные, завершите последнее поле в каждой строке символом новой строки (\n
), а все остальные поля символом табуляции (\t
). Чтобы разместить каждую запись данных в отдельной строке в файле данных, укажите сочетание \r\n
в качестве конца строки.
Примечание.
При интерактивном использовании bcp и указании \n
(newline) в качестве конца строки bcp автоматически добавляет перед ним символ \r
(возврат каретки), что приводит к созданию окончания строки \r\n
.
Укажите разделители для массового экспорта
При массовом экспорте данных типа char или nchar , если необходимо использовать знак завершения, отличный от назначенного по умолчанию, определите его для команды bcp . Вы можете указать терминаторы одним из следующих способов:
С помощью файла формата, который указывает терминатор для каждого поля отдельно.
Примечание.
Сведения об использовании файлов форматирования см. в разделе "Формат файлов" для импорта или экспорта данных (SQL Server).
Существуют также следующие возможности без использования файла форматирования:
Используйте переключатель
-t
, чтобы указать терминатор поля для всех полей, кроме последнего поля в строке и с помощью-r
переключателя, чтобы указать терминатор строки.Используйте переключатель формата символов (
-c
или-w
) без переключателя-t
, который задает терминатор поля символу табуляции,\t
. Это то же самое, что и при указании-t\t
.Примечание.
Если указать ключ
-n
(исходные данные) или-N
(исходный Юникод), то терминаторы не вставляются.Если интерактивная команда bcp содержит параметр
in
илиout
, но не содержит параметр форматирования файла (-f
) или параметры формата данных (-n
,-c
,-w
или-N
), и вы не указываете длину префикса и длину поля, тогда команда запрашивает разделитель полей для каждого поля, по умолчанию отсутствует:Enter field terminator [none]:
Обычно подходящим выбором является значение по умолчанию. Однако для полей данных char и nchar, см. следующий подраздел "Рекомендации по использованию терминаторов". Пример, показывающий этот запрос в контексте, приведен в разделе «Указание форматов данных совместимости при использовании bcp (SQL Server)».
Примечание.
После интерактивного заполнения всех полей в команде bcp появится запрос на сохранение введенных ответов для каждого поля в файле форматирования в формате, отличном от XML. Дополнительные сведения о файлах форматирования, отличных от XML, см. в разделе "Использование файлов форматирования, отличных от XML" (SQL Server).
Рекомендации по использованию терминаторов
В некоторых ситуациях для данных типа char или nchar может быть полезен терминатор. Например:
Для столбца данных, содержащего значение NULL в файле данных, который будет импортирован в программу, которая не понимает сведения о длине префикса.
Любой столбец данных, содержащий значение NULL, считается столбцом переменной длины. В отсутствие сведений о длине префикса признак конца необходим, чтобы указать конец поля NULL и удостовериться, что данные интерпретируются верно.
Длинный столбец фиксированной длины, пространство которого лишь частично используется многими строками.
В этой ситуации указание терминатора может минимизировать объем хранилища, что позволит обрабатывать поле как поле переменной длины.
Укажите \n
в качестве конца строки для массового экспорта
Когда вы определяете \n
как символ конца строки при массовом экспорте или неявно используете такой символ по умолчанию, bcp выводит комбинацию символов возврата каретки и перевода строки как символ конца строки. Чтобы указать только символ перевода строки (LF) как символ конца строки — как это принято на компьютерах Unix и Linux — используйте шестнадцатеричную нотацию для его указания. Например:
bcp -r '0x0A'
Примеры
В этом примере выполняется массовый экспорт данных из таблицы AdventureWorks2022.HumanResources.Department
в файл данных Department-c-t.txt
в символьном формате с запятой в качестве признака конца поля и знаком новой строки (\n) в качестве признака конца строки.
Команда bcp поддерживает следующие параметры.
переключатель | Описание |
---|---|
-c |
Указывает, что поля данных должны загружаться как символьные данные. |
-t , |
Задает запятую (,) в качестве разделителя поля. |
-r \n |
Задает в качестве признака конца строки символ перевода строки. Это терминатор строк по умолчанию, поэтому указание его необязательно. |
-T |
Указывает, что служебная программа bcp подключается к SQL Server с использованием доверенного подключения и интегрированной безопасности. Если -T не указано, необходимо указать -U и -P успешно войти в систему. |
Дополнительные сведения см. в разделе bcp Utility.
В командной строке Microsoft Windows введите следующее:
bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T
В результате этого будет создан файл Department-c-t.txt
, содержащий 16 записей, каждая из которых имеет четыре поля. Поля разделены с помощью символа запятой.
Укажите терминаторы для массового импорта
При массовом импорте данных типа char или nchar команда должна распознавать разделители, используемые в файле данных. В зависимости от команды массового импорта терминаторы могут устанавливаться следующим образом:
bcp
Указание терминаторов для операции импорта использует тот же синтаксис, что и для операции экспорта. Дополнительные сведения см. в разделе "Указание терминаторов для массового экспорта" ранее в этой статье.
BULK INSERT
Терминаторы можно указать для отдельных полей в файле формата или для всего файла данных, используя спецификаторы, показанные в следующей таблице.
Квалификатор Описание FIELDTERMINATOR = '<field_terminator>'
Задает разделитель полей, используемый для символьных файлов данных и файлов данных в кодировке Юникод.
Значение по умолчанию —\t
(символ табуляции).ROWTERMINATOR = '<row_terminator>'
Задает признак конца строки, используемый для символьных файлов данных и файлов в кодировке Юникод.
Значение по умолчанию —\n
(символ перехода на новую строку).Дополнительные сведения см. в статье BULK INSERT.
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Для поставщика массового набора строк разделители могут быть указаны только в файле форматирования (за исключением типов данных больших объектов, для которых он обязателен). Если в файле символьных данных используется терминатор, отличный от стандартного, он должен быть определен в форматном файле. Дополнительные сведения см. в разделе "Создание файла форматирования" (SQL Server) и использование файла форматирования для массового импорта данных (SQL Server).
Дополнительные сведения о предложении
OPENROWSET BULK
см. в разделе OPENROWSET (BULK).
Укажите \n
в качестве конца строки для массового импорта
Если вы указываете \n
в качестве конца строки для массового импорта или неявно используете терминатор строк по умолчанию, то bcp и инструкция BULK INSERT
ожидают комбинацию возврат каретки-перевод строки (CRLF) в качестве конца строки. Если исходный файл использует только символ перевода строки (LF) в качестве разделителя строк, как обычно в файлах, созданных на компьютерах Unix и Linux, используйте шестнадцатеричную нотацию для указания разделителя строки LF. Например, в инструкции BULK INSERT
:
ROWTERMINATOR = '0x0A'
Примеры
В примерах, содержащихся в этом разделе, рассматривается массовый импорт символьных данных из файла данных Department-c-t.txt
, созданного в предыдущем примере, в таблицу myDepartment
образца базы данных AdventureWorks2022
. Перед выполнением примеров следует создать эту таблицу. Чтобы создать эту таблицу в схеме, в редакторе dbo
запросов SQL Server Management Studio выполните следующий код:
USE AdventureWorks2022;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment
(
DepartmentID SMALLINT,
Name NVARCHAR (50),
GroupName NVARCHAR (50) NULL,
ModifiedDate DATETIME CONSTRAINT
DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO
А. Используйте bcp для интерактивного указания терминаторов
В следующем примере выполняется массовый импорт файла данных Department-c-t.txt
при помощи команды bcp
. Эта команда использует те же самые параметры, что и команда массового экспорта. Дополнительные сведения см. в разделе "Указание терминаторов для массового экспорта" ранее в этой статье.
В командной строке Windows введите следующую команду:
bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T
В. Использование BULK INSERT для интерактивного указания терминаторов
В следующем примере производится массовый импорт файла данных Department-c-t.txt
инструкцией BULK INSERT
, которая использует квалификаторы, показанные в следующей таблице.
Вариант | Атрибут |
---|---|
DATAFILETYPE = 'char' |
Указывает, что поля данных должны загружаться как символьные данные. |
FIELDTERMINATOR = ',' |
Задает запятую (, ) в качестве признака конца поля. |
ROWTERMINATOR = '\n' |
Задает в качестве признака конца строки символ перевода строки. |
В SQL Server Management Studio, Редактор запросов, выполните следующий код:
USE AdventureWorks2022;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO