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


Определение признаков конца поля и строки

Для символьных полей данных можно определить символы, которые являются разделителями полей и строк в файле данных, указав признак конца поля и признак конца строки. Для программ, считывающих файлы данных, это единственный способ определить, какими символами в нем разделяются строки и столбцы.

Важное примечаниеВажно!

При использовании собственного формата или собственного формата в кодировке Юникод вместо признаков конца поля используются префиксы длины. Данные в собственном формате могут вызвать конфликт с признаками конца, так как файл данных в собственном формате хранится во внутреннем двоичном представлении данных MicrosoftSQL Server.

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

Команда bcp, инструкция BULK INSERT и поставщик наборов строк OPENROWSET BULK поддерживают в качестве признака конца поля или строки различные символы и всегда производят поиск первого вхождения указанного признака. В следующей таблице содержится список поддерживаемых в качестве признаков конца поля или строки символов.

Символ признака

Обозначается как

Табуляция

\t

Признак конца поля по умолчанию.

Символ перевода строки

\n

Признак конца строки по умолчанию.

Возврат каретки и перевод строки

\r

Обратная косая черта 1

\\

Нулевой символ (невидимый признак)2

\0

Любой печатаемый символ (управляющие символы, за исключением символа NULL, символов табуляции, перевода строки и возврата каретки, являются непечатными)

(*, A, t, l и т. д.)

Строка, которая может содержать до десяти печатаемых символов, включая некоторые или все указанные выше признаки

(**\t**, конец, !!!!!!!!!!, \t—\n и т. д.)

1 Для обозначения управляющего символа с экранирующим символом обратной косой черты используются только символы t, n, r, 0 и «\0».

2 Хотя символ управления NULL (\0) не виден при печати, он является отдельным символом в файле данных, то есть если управляющий символ NULL используется в качестве признака конца поля или строки, то это не то же самое, что и полное отсутствие признака конца.

Важное примечаниеВажно!

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

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

Признаком конца строки может быть тот же символ, что и символ признака конца последнего поля. Но все же лучше выделить в качестве признака конца строки отдельный символ. Например, для формирования табличного вывода завершайте последнее поле каждой строки символом перевода строки (\n), а конец поля — символом табуляции (\t). Чтобы каждая строка файла данных попала в отдельную строку таблицы, в качестве признака конца строки задайте сочетание \r\n.

ПримечаниеПримечание

При использовании программы bcp в интерактивном режиме, если в качестве признака конца строки задан символ \n (перевод строки), программа bcp автоматически добавляет к ней префикс \r (возврат каретки), в результате чего формируется признак конца строки \r\n.

Задание признаков конца полей и строк при массовом экспорте

При массовом экспорте данных типа char или nchar, если необходимо использовать признак, отличный от назначенного по умолчанию, определите его для команды bcp. Это можно сделать одним из следующих способов:

  • При помощи файла форматирования, задающего признаки конца каждого поля отдельно.

    ПримечаниеПримечание

    Дополнительные сведения о том, как использовать файлы форматирования, см. в разделе Файлы форматирования для импорта или экспорта данных.

  • Существуют также следующие возможности без использования файла форматирования:

    • Указать аргумент -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.

      ПримечаниеПримечание

      После того, как все поля в интерактивном режиме в команде bcp определены, она предлагает сохранить настройки для каждого поля в файле форматирования в формате, отличном от XML. Дополнительные сведения о файлах форматирования в формате, отличном от XML см. в разделе Основные сведения о файлах форматирования в формате, отличном от XML.

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

В некоторых ситуациях для данных типа char или nchar имеет смысл использовать признаки конца поля, Например:

Примеры

В этом примере выполняется массовый экспорт данных из таблицы AdventureWorksHumanResources.Department в файл данных Department-c-t.txt в символьном формате, с запятой в качестве признака конца поля и символом перевода строки (\n) в качестве признака конца строки. Дополнительные сведения об этой таблице см. в разделе Таблица Department (AdventureWorks).

Команда bcp поддерживает следующие параметры.

Параметр

Описание

-c

Указывает, что поля данных должны загружаться как символьные данные.

-t,

Задает запятую (,) в качестве признака конца поля.

-r \n

Задает в качестве признака конца строки символ перевода строки. Это признак конца строки по умолчанию, поэтому его задание необязательно.

-T

Указывает, что программа bcp устанавливает доверительное соединение с SQL Server при использовании встроенной системы безопасности. Если параметр -T не задан, для успешного входа необходимо указать параметры -U и -P.

Дополнительные сведения см. в разделе Программа bcp.

В командной строке Microsoft Windows введите:

bcp AdventureWorks.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 (Transact-SQL).

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

    Для поставщика массовых наборов строк OPENROWSET признаки конца могут задаваться только в файле форматирования (который обязателен для всех типов данных, кроме типа данных больших объектов). Если в файле символьных данных используется признак, отличный от установленного по умолчанию, он должен быть определен в файле форматирования. Дополнительные сведения см. в разделах Создание файла форматирования и Использование файла форматирования для массового импорта данных.

    Дополнительные сведения о предложении OPENROWSET BULK см. в разделе OPENROWSET (Transact-SQL).

Примеры

В примерах, содержащихся в этом разделе, рассматривается массовый импорт символьных данных из файла данных Department-c-t.txt, созданного в предыдущем примере, в таблицу myDepartment образца базы данных AdventureWorks. Перед выполнением примеров следует создать эту таблицу. Для этого в схеме dbo в редакторе запросов среды SQL Server Management Studio выполните следующий код:

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

А. Использование bcp для задания признаков конца полей и строк в интерактивном режиме

В следующем примере выполняется массовый импорт файла данных Department-c-t.txt при помощи команды bcp. Эта команда использует те же самые параметры, что и команда массового экспорта. Дополнительные сведения см. в подразделе «Задание признаков конца полей и строк при массовом экспорте» ранее в этом разделе.

В командной строке Windows введите:

bcp AdventureWorks..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 AdventureWorks;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO