Определение признаков конца поля и строки (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)