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

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

Важно!

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

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

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

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

Признак конца поля по умолчанию.
Символ перевода строки \n

Признак конца строки по умолчанию.
Возврат каретки и перевод строки \r
Обратная косаячерта 1 \|
Признак конца null (невидимый признак конца)2 \0
Любой печатаемый символ (управляющие символы, за исключением символа NULL, символов табуляции, перевода строки и возврата каретки, являются непечатными) (*, A, t, l и т. д.)
Строка, которая может содержать до десяти печатных символов, включая некоторые или все указанные выше признаки конца (**\t**, end, !!!!!!!!!, \t-\n и т. д.)

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

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 Utility.

В командной строке 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  
  

A. Задание признаков конца полей и строк в интерактивном режиме с помощью 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 , которая использует квалификаторы, показанные в следующей таблице.

Параметр attribute
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)