Определение признаков конца поля и строки (SQL Server)Specify Field and Row Terminators (SQL Server)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance даAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics даПараллельное хранилище данныхParallel Data WarehouseyesПараллельное хранилище данныхParallel Data Warehouse

Для символьных полей данных можно определить символы, которые являются разделителями полей и строк в файле данных, указав признак конца поля и признак конца строки.For character data fields, optional terminating characters allow you to mark the end of each field in a data file with a field terminator and the end of each row with a row terminator. Для программ, считывающих файлы данных, это единственный способ определить, какими символами в нем разделяются строки и столбцы.Terminating characters are one way to indicate to programs that read the data file where one field or row ends and another field or row begins.

Важно!

При использовании собственного формата или собственного формата в кодировке Юникод вместо признаков конца поля используются префиксы длины.When you use native or Unicode native format, use length prefixes rather than field terminators. Данные в собственном формате могут конфликтовать со знаками завершения, так как файл данных в собственном формате хранится во внутреннем двоичном формате данных MicrosoftMicrosoftSQL ServerSQL Server .Native format data can conflict with terminators because a native-format data file is stored in the MicrosoftMicrosoftSQL ServerSQL Server internal binary data format.

Символы, поддерживаемые в качестве признаков конца полей и строкCharacters Supported As Terminators

Команда bcp , инструкция BULK INSERT и поставщик больших наборов строк OPENROWSET поддерживают в качестве признака конца поля или строки различные знаки и всегда производят поиск первого вхождения указанного знака завершения.The bcp command, BULK INSERT statement, and the OPENROWSET bulk rowset provider support a variety of characters as field or row terminators and always look for the first instance of each terminator. В следующей таблице содержится список поддерживаемых в качестве признаков конца поля или строки символов.The following table lists the supported characters for terminators.

Символ признакаTerminating character Обозначается какIndicated by
ВкладкаTab \t\t

Признак конца поля по умолчанию.This is the default field terminator.
Символ перевода строкиNewline character \n\n

Признак конца строки по умолчанию.This is the default row terminator.
Возврат каретки и перевод строкиCarriage return/line feed \r\r
Обратная косая черта*Backslash* \|
Знак завершения NULL (невидимый знак завершения)**Null terminator (nonvisible terminator)** \0\0
Любой печатаемый символ (управляющие символы, за исключением символа NULL, символов табуляции, перевода строки и возврата каретки, являются непечатными)Any printable character (control characters are not printable, except null, tab, newline, and carriage return) (*, A, t, l и т. д.)(*, A, t, l, and so on)
Строка, которая может содержать до десяти печатных символов, включая некоторые или все указанные выше признаки концаString of up to 10 printable characters, including some or all of the terminators listed earlier (**\t**, end, !!!!!!!!!!, \t-\n и т. д.)(**\t**, end, !!!!!!!!!!, \t-\n, and so on)

*Для обозначения управляющего символа с escape-символом обратной косой черты используются только знаки t, n, r, 0 и "\0".*Only the t, n, r, 0 and '\0' characters work with the backslash escape character to produce a control character.

**Хотя управляющий символ NULL (\0) не виден при печати, он является отдельным знаком в файле данных,**Even though the null control character (\0) is not visible when printed, it is a distinct character in the data file. то есть если управляющий символ NULL используется в качестве признака конца поля или строки, то это не то же самое, что и полное отсутствие признака конца.This means that using the null control character as a field or row terminator is different than having no field or row terminator at all.

Важно!

Если символ признака конца поля или строки содержится в данных, он интерпретируется именно как признак, и данные после него интерпретируются как относящиеся к следующему полю или записи данных.If a terminator character occurs within the data, it is interpreted as a terminator, not as data, and the data after that character is interpreted as belonging to the next field or record. Поэтому следует выбирать символы признака конца так, чтобы они никогда не встречались в передаваемых данных.Therefore, choose your terminators carefully to make sure that they never appear in your data. Например, младший символ-заместитель признака конца поля не рекомендуется использовать в качестве признака конца поля, если этот младший символ-заместитель содержится в данных.For example, a low surrogate field terminator would not be a good choice for a field terminator if the data contains that low surrogate.

Использование признаков конца строкиUsing Row Terminators

Признаком конца строки может быть тот же символ, что и символ признака конца последнего поля.The row terminator can be the same character as the terminator for the last field. Но все же лучше выделить в качестве признака конца строки отдельный символ.Generally, however, a distinct row terminator is useful. Например, для формирования табличного вывода завершайте последнее поле каждой строки символом перевода строки (\n), а конец поля — символом табуляции (\t).For example, to produce tabular output, terminate the last field in each row with the newline character (\n) and all other fields with the tab character (\t). Чтобы каждая строка файла данных попала в отдельную строку таблицы, в качестве признака конца строки задайте сочетание \r\n.To place each data record on its own line in the data file, specify the combination \r\n as the row terminator.

Примечание

Если при использовании bcp в интерактивном режиме в качестве признака конца строки задан знак \n (перевод строки), bcp автоматически добавляет к ней префикс \r (возврат каретки), в результате чего формируется признак конца строки \r\n.When you use bcp interactively and specify \n (newline) as the row terminator, bcp automatically prefixes it with a \r (carriage return) character, which results in a row terminator of \r\n.

Задание признаков конца полей и строк при массовом экспортеSpecifying Terminators for Bulk Export

При массовом экспорте данных типа char или nchar , если необходимо использовать знак завершения, отличный от назначенного по умолчанию, определите его для команды bcp .When you bulk export char or nchar data, and want to use a non-default terminator, you must specify the terminator to the bcp command. Это можно сделать одним из следующих способов:You can specify terminators in any of the following ways:

  • При помощи файла форматирования, задающего признаки конца каждого поля отдельно.With a format file that specifies the terminator on a field-by-field basis.

    Примечание

    Дополнительные сведения об использовании файлов форматирования см. в разделе Файлы форматирования для импорта или экспорта данных (SQL Server ).For information about how to use format files, see Format Files for Importing or Exporting Data (SQL Server).

  • Существуют также следующие возможности без использования файла форматирования:Without a format file, the following alternatives exist:

    • Указать параметр -t , задающий признак конца поля для всех полей, за исключением последнего поля в строке, и параметр -r , задающий признак конца строки.Using the -t switch to specify the field terminator for all the fields except the last field in the row and using the -r switch to specify a row terminator.

    • Указать параметр символьного формата ( -c или -w) без параметра -t , который задает в качестве признака конца поля знак табуляции \t.Using a character-format switch (-c or -w) without the -t switch, which sets the field terminator to the tab character, \t. Это аналогично указанию -t\t.This is the same as specifying -t\t.

      Примечание

      Если указан параметр -n (данные в собственном формате) или -N (данные в собственном формате в кодировке Юникод), то признаки конца полей и строк не вставляются.If you specify the -n (native data) or -N (Unicode native) switch, terminators are not inserted.

    • Если интерактивная команда bcp содержит параметр in или out без указания параметра файла форматирования ( -f) или параметра формата данных ( -n, -c, -wили -N) и если предписано не указывать длину префикса и поля, команда предлагает пользователю указать признак конца каждого поля, причем по умолчанию признак конца отсутствует.If an interactive bcp command contains the in or out option without either the format file switch (-f) or a data-format switch (-n, -c, -w, or -N), and you have chosen not to specify prefix length and field length, the command prompts for the field terminator of each field, with a default of none:

      Enter field terminator [none]:

      Обычно приемлемо значение по умолчанию.Generally, the default is a suitable choice. Однако для полей данных типа char или nchar существуют особенности, которые рассмотрены в следующем подразделе «Правила использования признаков конца полей и строк».However, for char or nchar data fields, see the following subsection, "Guidelines for Using Terminators." Пример с описанием данного запроса см. в разделе Указание форматов данных для совместимости с помощью программы bcp (SQL Server).For an example that shows this prompt in context, see Specify Data Formats for Compatibility when Using bcp (SQL Server).

      Примечание

      После интерактивного заполнения всех полей в команде bcp появится запрос на сохранение введенных ответов для каждого поля в файле форматирования в формате, отличном от XML.After you interactively specify all of the fields in a bcp command, the command prompts you save your responses for each field in a non-XML format file. Дополнительные сведения о файлах форматирования в формате, отличном от XML, см. в разделе Файлы формата, отличные от XML (SQL Server).For more information about non-XML format files, see Non-XML Format Files (SQL Server).

Рекомендации по использованию признаков конца полей и строкGuidelines for Using Terminators

В некоторых ситуациях для данных типа char или nchar имеет смысл использовать признаки конца поля,In some situations, a terminator is useful for a char or nchar data field. Пример:For example:

  • Для столбца данных, содержащего значение NULL в файле данных, который будет импортирован в программу, не распознающую сведения о длине префикса.For a data column that contains a null value in a data file that will be imported into a program that does not understand the prefix length information.

    Любой столбец данных, содержащий значение NULL, считается столбцом переменной длины.Any data column that contains a null value is considered variable length. В отсутствие сведений о длине префикса признак конца необходим, чтобы указать конец поля NULL и удостовериться, что данные интерпретируются верно.In the absence of prefix lengths, a terminator is necessary to identify the end of a null field, making sure that the data is correctly interpreted.

  • Длинный столбец фиксированной длины, пространство которого лишь частично используется многими строками.For a long fixed-length column whose space is only partially used by many rows.

    В этой ситуации задание признака конца может минимизировать занимаемый данными объем, что позволит обрабатывать поле как поле переменной длины.In this situation, specifying a terminator can minimize storage space allowing the field to be treated as a variable-length field.

Определение \n в качестве символа конца строки при массовом экспортеSpecifying \n as a Row Terminator for Bulk Export

Когда вы определяете \n как символ конца строки при массовом экспорте или неявно используете такой символ по умолчанию, bcp выводит комбинацию символов возврата каретки и перевода строки как символ конца строки.When you specify \n as a row terminator for bulk export, or implicitly use the default row terminator, bcp outputs a carriage return-line feed combination (CRLF) as the row terminator. Чтобы получить только символ перевода строки как символ конца строки (как это обычно происходит на компьютерах Unix и Linux), используйте шестнадцатеричную нотацию.If you want to output a line feed character only (LF) as the row terminator - as is typical on Unix and Linux computers - use hexadecimal notation to specify the LF row terminator. Пример:For example:

bcp -r '0x0A'

ПримерыExamples

В этом примере выполняется массовый экспорт данных из таблицы AdventureWorks.HumanResources.Department в файл данных Department-c-t.txt в символьном формате с запятой в качестве признака конца поля и знаком новой строки (\n) в качестве признака конца строки.This example bulk exports the data from the AdventureWorks.HumanResources.Department table to the Department-c-t.txt data file using character format, with a comma as a field terminator and the newline character (\n) as the row terminator.

Команда bcp поддерживает следующие параметры.The bcp command contains the following switches.

ПараметрSwitch ОписаниеDescription
-c-c Указывает, что поля данных должны загружаться как символьные данные.Specifies that the data fields be loaded as character data.
-t ,-t , Задает запятую (,) в качестве признака конца поля.Specifies a comma (,) as the field terminator.
-r \n-r \n Задает в качестве признака конца строки символ перевода строки.Specifies the row terminator as a newline character. Это признак конца строки по умолчанию, поэтому его задание необязательно.This is the default row terminator, so specifying it is optional.
-T-T Указывает, что программа bcp устанавливает доверительное соединение с SQL ServerSQL Server с использованием встроенной безопасности.Specifies that the bcp utility connects to SQL ServerSQL Server with a trusted connection using integrated security. Если параметр -T не указан, для входа необходимо указать -U и -P .If -T is not specified, you need to specify -U and -P to successfully log in.

Дополнительные сведения см. в разделе bcp Utility.For more information, see bcp Utility.

В командной строке MicrosoftMicrosoft Windows введите:At the MicrosoftMicrosoft Windows command prompt enter:

bcp AdventureWorks.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T  

В результате этого будет создан файл Department-c-t.txt, содержащий 16 записей, каждая из которых имеет четыре поля.This creates Department-c-t.txt, which contains 16 records with four fields each. Поля разделены с помощью символа запятой.The fields are separated by a comma.

Задание признаков конца для массового импортаSpecifying Terminators for Bulk Import

При массовом импорте данных типа char или nchar команда должна распознавать признаки конца полей и строк, используемые в файле данных.When you bulk import char or nchar data, the bulk-import command must recognize the terminators that are used in the data file. В зависимости от команды массового импорта признаки конца полей и строк могут задаваться следующим образом:How terminators can be specified depends on the bulk-import command, as follows:

  • bcpbcp

    При определении признака конца полей и строк в операциях импорта используется тот же самый синтаксис, что и для операций экспорта.Specifying terminators for an import operation uses the same syntax as for an export operation. Дополнительные сведения см. в подразделе «Задание признаков конца полей и строк при массовом экспорте» ранее в этом разделе.For more information, see "Specifying Terminators for Bulk Export," earlier in this topic.

  • BULK INSERTBULK INSERT

    Признаки конца в файле форматирования могут быть определены как для отдельных полей, так и для всего файла данных при помощи квалификаторов, приведенных в следующей таблице.Terminators can be specified for individual fields in a format file or for the whole data file by using the qualifiers shown in the following table.

    КвалификаторQualifier ОписаниеDescription
    FIELDTERMINATOR ='признак_конца_поля'FIELDTERMINATOR ='field_terminator' Задает признак конца поля, используемый для символьных файлов данных и файлов в кодировке Юникод.Specifies the field terminator to be used for character and Unicode character data files.

    Значением по умолчанию является \t (символ табуляции).The default is \t (tab character).
    ROWTERMINATOR ='признак_конца_строки'ROWTERMINATOR ='row_terminator' Задает признак конца строки, используемый для символьных файлов данных и файлов в кодировке Юникод.Specifies the row terminator to be used for character and Unicode character data files.

    Значением по умолчанию является \n (символ перевода строки).The default is \n (newline character).

    Дополнительные сведения см. в разделе BULK INSERT (Transact-SQL).For more information, see BULK INSERT (Transact-SQL).

  • Инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...).INSERT ... SELECT * FROM OPENROWSET(BULK...)

    Для поставщика массовых наборов строк OPENROWSET признаки конца могут задаваться только в файле форматирования (который обязателен для всех типов данных, кроме типа данных больших объектов).For the OPENROWSET bulk rowset provider, terminators can be specified only in the format file (which is required except for large-object data types). Если в файле символьных данных используется признак, отличный от установленного по умолчанию, он должен быть определен в файле форматирования.If a character data file uses a non-default terminator, it must be defined in the format file. Дополнительные сведения см. в разделах Создание файла форматирования (SQL Server) и Использование файла форматирования для массового импорта данных (SQL Server).For more information, see Create a Format File (SQL Server) and Use a Format File to Bulk Import Data (SQL Server).

    Дополнительные сведения о предложении OPENROWSET BULK см. в разделе OPENROWSET (Transact-SQL).For more information about the OPENROWSET BULK clause, see OPENROWSET (Transact-SQL).

Определение \n в качестве символа конца строки при массовом импортеSpecifying \n as a Row Terminator for Bulk Import

Когда вы определяете \n как символ конца строки при массовом импорте или неявно используете такой символ по умолчанию, bcp и инструкция BULK INSERT ожидают комбинацию символов возврата каретки и перевода строки как символ конца строки.When you specify \n as a row terminator for bulk import, or implicitly use the default row terminator, bcp and the BULK INSERT statement expect a carriage return-line feed combination (CRLF) as the row terminator. Если в исходном файле используется только символ перевода строки как символ конца строки (как это обычно происходит в файлах, созданных на компьютерах Unix и Linux), используйте шестнадцатеричную нотацию.If your source file uses a line feed character only (LF) as the row terminator - as is typical in files generated on Unix and Linux computers - use hexadecimal notation to specify the LF row terminator. Например, в инструкции BULK INSERT:For example, in a BULK INSERT statement:

    ROWTERMINATOR = '0x0A'

ПримерыExamples

В примерах, содержащихся в этом разделе, рассматривается массовый импорт символьных данных из файла данных Department-c-t.txt , созданного в предыдущем примере, в таблицу myDepartment образца базы данных AdventureWorks2012AdventureWorks2012 .The examples in this section bulk import character data form the Department-c-t.txt data file created in the preceding example into the myDepartment table in the AdventureWorks2012AdventureWorks2012 sample database. Перед выполнением примеров следует создать эту таблицу.Before you can run the examples, you must create this table. Для этого в схеме dbo в редакторе запросов среды SQL Server Management StudioSQL Server Management Studio выполните следующий код:To create this table under the dbo schema, in SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

USE AdventureWorks;  
GO  
DROP TABLE myDepartment;  
CREATE TABLE myDepartment   
(DepartmentID smallint,  
Name nvarchar(50),  
GroupName nvarchar(50) NULL,  
ModifiedDate datetime not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())  
);  
GO 

A.A. Задание признаков конца полей и строк в интерактивном режиме с помощью bcpUsing bcp to interactively specify terminators

В следующем примере выполняется массовый импорт файла данных Department-c-t.txt при помощи команды bcp .The following example bulk imports the Department-c-t.txt data file using a bcp command. Эта команда использует те же самые параметры, что и команда массового экспорта.This command uses the same command switches as the bulk export command. Дополнительные сведения см. в подразделе «Задание признаков конца полей и строк при массовом экспорте» ранее в этом разделе.For more information, see "Specifying Terminators for Bulk Export," earlier in this topic.

В командной строке Windows введите:At the Windows command prompt enter:

bcp AdventureWorks..myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T  

Б.B. Задание признаков конца в интерактивном режиме с помощью инструкции BULK INSERTUsing BULK INSERT to interactively specify terminators

В следующем примере производится массовый импорт файла данных Department-c-t.txt инструкцией BULK INSERT , которая использует квалификаторы, показанные в следующей таблице.The following example bulk imports the Department-c-t.txt data file using a BULK INSERT statement that uses the qualifiers shown in the following table.

ПараметрOption attributeAttribute
DATAFILETYPE =' char 'DATAFILETYPE =' char ' Указывает, что поля данных должны загружаться как символьные данные.Specifies that the data fields be loaded as character data.
FIELDTERMINATOR =' , 'FIELDTERMINATOR =',' Задает запятую (,) в качестве признака конца поля.Specifies a comma (,) as the field terminator.
ROWTERMINATOR =' \n 'ROWTERMINATOR ='\n' Задает в качестве признака конца строки символ перевода строки.Specifies the row terminator as a newline character.

В редакторе запросов в среде SQL Server Management StudioSQL Server Management Studio выполните следующий код:In SQL Server Management StudioSQL Server Management Studio Query Editor, execute the following code:

USE AdventureWorks;  
GO  
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'  
   WITH (  
      DATAFILETYPE = 'char',  
      FIELDTERMINATOR = ',',  
      ROWTERMINATOR = '\n'  
);  
GO  

См. также:See Also

bcp Utility bcp Utility
BULK INSERT (Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Указание длины поля с помощью программы bcp (SQL Server) Specify Field Length by Using bcp (SQL Server)
Определение длины префикса в файлах данных с помощью программы bcp (SQL Server) Specify Prefix Length in Data Files by Using bcp (SQL Server)
Указание типа файлового хранилища с помощью программы bcp (SQL Server)Specify File Storage Type by Using bcp (SQL Server)