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

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 поддерживает следующие параметры.

Switch Description
-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

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

    Квалификатор Description
    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  

B. Задание признаков конца в интерактивном режиме с помощью инструкции 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 Utility
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Указание длины поля с помощью bcp (SQL Server)
Указание длины префикса в файлах данных с помощью bcp (SQL Server)
Указание типа хранилища файлов с помощью bcp (SQL Server)