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

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

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

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

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

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

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

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

Табуляция

\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. Это можно сделать одним из следующих способов:

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

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

    Дополнительные сведения о том, как использовать файлы форматирования, см. в разделе Файлы форматирования для импорта или экспорта данных (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 и удостовериться, что данные интерпретируются верно.

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

    В этой ситуации задание признака конца может минимизировать занимаемый данными объем, что позволит обрабатывать поле как поле переменной длины.

Примеры

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

Команда 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 признаки конца могут задаваться только в файле форматирования (который обязателен для всех типов данных, кроме типа данных больших объектов). Если в файле символьных данных используется признак, отличный от установленного по умолчанию, он должен быть определен в файле форматирования. Дополнительные сведения см. в разделах Создание файла форматирования (SQL Server) и Использование файла форматирования для массового импорта данных (SQL Server).

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

Примеры

В примерах, содержащихся в этом разделе, рассматривается массовый импорт символьных данных из файла данных Department-c-t.txt, созданного в предыдущем примере, в таблицу myDepartment образца базы данных AdventureWorks2012 . Перед выполнением примеров следует создать эту таблицу. Для этого в схеме 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

См. также

Справочник

Программа bcp

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

Основные понятия

Указание длины поля с помощью программы bcp (SQL Server)

Определение длины префикса в файлах данных с помощью программы bcp (SQL Server)

Указание типа файлового хранилища с помощью программы bcp (SQL Server)