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

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

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

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

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

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

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

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

Табуляция

\t

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

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

\n

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

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

\r

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

\\

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

\0

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

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

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

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

1 Для обозначения escape-символа с экранирующим символом обратной косой черты используются только символы 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 имеет смысл использовать признаки конца поля. Примеры.

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

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

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

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

Примеры

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

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

Параметр

Описание

-c

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

-t,

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

-r \n

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

-T

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

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

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

bcp AdventureWorks2008R2.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 образца базы данных База данных AdventureWorks2008R2. Перед выполнением примеров следует создать эту таблицу. Для этого в схеме dbo в редакторе запросов среды Среда SQL Server Management Studio выполните следующий код:

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