Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Конечная точка аналитики SQL в Microsoft Fabric
Хранилище в Microsoft Fabric
Для символьных полей данных можно использовать необязательные символы, которые позволяют указывать конец каждого поля в файле данных с помощью разделителя поля и конец каждой строки с помощью разделителя строки. Один из способов указать программам, считывающим файл данных, где заканчивается одно поле или строка и начинается другое поле или строка, заключается в использовании завершающих символов.
Important
При использовании нативного формата или нативного формата в кодировке Юникод используйте префиксы длины вместо разделителей полей. Данные собственного формата могут конфликтуть с терминаторами, так как файл данных собственного формата хранится в формате внутренних двоичных данных Microsoft SQL Server.
Символы, поддерживаемые в качестве терминаторов
Команда bcp, оператор BULK INSERT
и поставщик массового набора строк OPENROWSET
поддерживают использование различных символов в качестве разделителей полей или строк и всегда ищут первое появление каждого разделителя. В следующей таблице перечислены поддерживаемые символы для разделителей.
Terminating character | Indicated by | Description |
---|---|---|
Tab | \t |
Признак конца поля по умолчанию. |
Newline character | \n |
Это символ окончания строки по умолчанию. |
Возврат каретки и перевод строки | \r |
|
Backslash 1 | \ |
|
Терминатор NULL (невидимый терминатор) 2 | \0 |
|
Любой печатный символ (управляющие символы не являются печатными, кроме нулевого символа, табуляции, новой строки и возврата каретки) | (* , A , t , l , и т. д.) |
|
Строка, содержащая до десяти печатных символов, включая некоторые или все из ранее перечисленных терминаторов. | (**\t** , end , !!!!!!!!!! , \t-\n , и т. д.) |
1 Только символы t
, n
, r
, 0
и \0
работают с управляющим символом обратной косой черты, чтобы создать элемент управления.
2 Несмотря на то, что символ элемента управления NULL (\0
) не отображается при печати, это отдельный символ в файле данных. то есть если управляющий символ NULL используется в качестве признака конца поля или строки, то это не то же самое, что и полное отсутствие признака конца.
Important
Если в данных встречается символ-ограничитель, он интерпретируется как ограничитель, а не как данные, и данные после этого символа трактуются как принадлежащие следующему полю или записи. Поэтому выбирайте знаки окончания или разделители так, чтобы они никогда не встречались в ваших данных. Например, терминатор с низким суррогатным полем не является хорошим выбором для конца поля, если данные содержат низкое суррогатное значение.
Используйте терминаторы строк
Признаком конца строки может быть тот же символ, что и символ конца последнего поля. Однако, как правило, отдельный терминатор строки полезен. Например, чтобы создать табличные выходные данные, завершите последнее поле в каждой строке символом новой строки (\n
), а все остальные поля символом табуляции (\t
). Чтобы разместить каждую запись данных в отдельной строке в файле данных, укажите сочетание \r\n
в качестве конца строки.
Note
При интерактивном использовании bcp и указании \n
(newline) в качестве конца строки bcp автоматически добавляет перед ним символ \r
(возврат каретки), что приводит к созданию окончания строки \r\n
.
Укажите разделители для массового экспорта
При массовом экспорте данных типа char или nchar , если необходимо использовать знак завершения, отличный от назначенного по умолчанию, определите его для команды bcp . Вы можете указать терминаторы одним из следующих способов:
С помощью файла формата, который указывает терминатор для каждого поля отдельно.
Note
Сведения об использовании файлов форматирования см. в разделе "Формат файлов" для импорта или экспорта данных (SQL Server).
Существуют также следующие возможности без использования файла форматирования:
Используйте переключатель
-t
, чтобы указать терминатор поля для всех полей, кроме последнего поля в строке и с помощью-r
переключателя, чтобы указать терминатор строки.Используйте переключатель формата символов (
-c
или-w
) без переключателя-t
, который задает терминатор поля символу табуляции,\t
. Это то же самое, что и при указании-t\t
.Note
Если указать ключ
-n
(исходные данные) или-N
(исходный Юникод), то терминаторы не вставляются.Если интерактивная команда bcp содержит параметр
in
илиout
, но не содержит параметр форматирования файла (-f
) или параметры формата данных (-n
,-c
,-w
или-N
), и вы не указываете длину префикса и длину поля, тогда команда запрашивает разделитель полей для каждого поля, по умолчанию отсутствует:Enter field terminator [none]:
Обычно подходящим выбором является значение по умолчанию. Однако для полей данных char и nchar, см. следующий подраздел "Рекомендации по использованию терминаторов". Пример, показывающий этот запрос в контексте, приведен в разделе «Указание форматов данных совместимости при использовании bcp (SQL Server)».
Note
После интерактивного заполнения всех полей в команде bcp появится запрос на сохранение введенных ответов для каждого поля в файле форматирования в формате, отличном от XML. Дополнительные сведения о файлах форматирования, отличных от XML, см. в разделе "Использование файлов форматирования, отличных от XML" (SQL Server).
Рекомендации по использованию терминаторов
В некоторых ситуациях для данных типа char или nchar может быть полезен терминатор. For example:
Для столбца данных, содержащего значение NULL в файле данных, который будет импортирован в программу, которая не понимает сведения о длине префикса.
Любой столбец данных, содержащий значение NULL, считается столбцом переменной длины. В отсутствие сведений о длине префикса признак конца необходим, чтобы указать конец поля NULL и удостовериться, что данные интерпретируются верно.
Длинный столбец фиксированной длины, пространство которого лишь частично используется многими строками.
В этой ситуации указание терминатора может минимизировать объем хранилища, что позволит обрабатывать поле как поле переменной длины.
Укажите \n
в качестве конца строки для массового экспорта
Когда вы определяете \n
как символ конца строки при массовом экспорте или неявно используете такой символ по умолчанию, bcp выводит комбинацию символов возврата каретки и перевода строки как символ конца строки. Чтобы указать только символ перевода строки (LF) как символ конца строки — как это принято на компьютерах Unix и Linux — используйте шестнадцатеричную нотацию для его указания. For example:
bcp -r '0x0A'
Examples
В этом примере выполняется массовый экспорт данных из таблицы AdventureWorks2022.HumanResources.Department
в файл данных Department-c-t.txt
в символьном формате с запятой в качестве признака конца поля и знаком новой строки (\n) в качестве признака конца строки.
Команда bcp поддерживает следующие параметры.
Switch | Description |
---|---|
-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
Терминаторы можно указать для отдельных полей в файле формата или для всего файла данных, используя спецификаторы, показанные в следующей таблице.
Qualifier Description 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'
Examples
В примерах, содержащихся в этом разделе, рассматривается массовый импорт символьных данных из файла данных 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
A. Используйте bcp для интерактивного указания терминаторов
В следующем примере выполняется массовый импорт файла данных Department-c-t.txt
при помощи команды bcp
. Эта команда использует те же самые параметры, что и команда массового экспорта. Дополнительные сведения см. в разделе "Указание терминаторов для массового экспорта" ранее в этой статье.
В командной строке Windows введите следующую команду:
bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T
B. Использование BULK INSERT для интерактивного указания терминаторов
В следующем примере производится массовый импорт файла данных Department-c-t.txt
инструкцией BULK INSERT
, которая использует квалификаторы, показанные в следующей таблице.
Option | Attribute |
---|---|
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