Программа bcp

Служебная программа bcp массово копирует данные между экземпляром Microsoft SQL Server и файлом данных в указанном пользователем формате. Служебная программа bcp может использоваться для импорта большого количества новых строк в таблицы SQL Server или экспорта данных из таблиц в файлы данных. За исключением случаев использования параметра queryout, применение программы не требует знания языка Transact-SQL. Чтобы выполнить импорт данных в таблицу, необходимо или использовать файл форматирования, созданный для этой таблицы, либо изучить структуру таблицы и типов данных, допустимых для ее столбцов.

Значок ссылки на разделСведения о соглашениях синтаксиса, используемых для синтаксиса bcp, см. в соглашениях о синтаксисе Transact-SQL (Transact-SQL).

Примечание.

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

Синтаксис

  
   bcp [database_name.] schema.{table_name | view_name | "query" {indata_file | outdata_file | queryoutdata_file | format nul}  
  
[-apacket_size]  
[-bbatch_size]  
[-c]  
[-C { ACP | OEM | RAW | code_page } ]  
[-ddatabase_name]  
[-eerr_file]  
[-E]  
[-fformat_file]  
[-Ffirst_row]  
[-h"hint [,...n]"]   
[-iinput_file]  
[-k]  
[-Kapplication_intent]  
[-Llast_row]  
[-mmax_errors]  
[-n]  
[-N]  
[-ooutput_file]  
[-Ppassword]  
[-q]  
[-rrow_term]  
[-R]  
[-S [server_name[\instance_name]]  
[-tfield_term]  
[-T]  
[-Ulogin_id]  
[-v]  
[-V (80 | 90 | 100 | 110)]  
[-w]  
[-x]  
/?  

Аргументы

data_file
Полный путь файла данных. При массовом импорте данных в SQL Server файл данных содержит данные, которые нужно скопировать в указанную таблицу или представление. При массовом экспорте данных из SQL Server файл данных содержит данные, скопированные из таблицы или представления. Путь может содержать от 1 до 255 символов. Файл данных может содержать максимум 263 – 1 строк.

database_name
Имя базы данных, в которой находится указанная таблица или представление. Эта база данных будет по умолчанию использоваться для пользователя, если не указано иное.

Можно также явным образом указать имя базы данных с помощью параметра d-.

в data_file outdata_file | queryoutdata_file | | format nul
Указывает направление массового копирования следующим образом:

  • in — копирует данные из файла в таблицу или представление базы данных.

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

  • queryout — копирует данные из запроса. Этот аргумент может быть указан только при массовом копировании данных из запроса.

  • Формат создает файл формата на основе указанного параметра (-n, -c-wили -N) и разделителей таблицы или представления. При выполнении массового копирования данных программа bcp может обратиться к файлу форматирования, что позволяет избежать повторного ввода данных о формате в интерактивном режиме. Параметр format требует наличия параметра -f . Для создания XML-файла форматирования, кроме того, необходим параметр -x . Дополнительные сведения см. в статье Создание файла форматирования (SQL Server). В качестве значения необходимо указать nul (format nul).

владелец
Имя владельца таблицы или представления. Можно не указывать необязательный параметрowner , если пользователь, выполняющий операцию, является владельцем указанной таблицы или представления. Если владелец не указан, и пользователь, выполняющий операцию, не владеет указанной таблицей или представлением, SQL Server возвращает сообщение об ошибке, а операция отменена.

"query"
Запрос Transact-SQL, возвращающий результирующий набор. Если запрос возвращает несколько результирующих наборов, то в файл данных будет скопирован только первый результирующий набор. Последующие результирующие наборы не учитываются. Используйте двойные кавычки для запроса и одинарные кавычки для выражений, внедренных в запрос. При выполнении массового копирования данных из запроса необходимо, помимо прочего, указывать аргументqueryout .

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

table_name
Имя целевой таблицы при импорте данных в SQL Server (в) и исходная таблица при экспорте данных из SQL Server (out).

view_name
Имя целевого представления при копировании данных в SQL Server (в) и исходное представление при копировании данных из SQL Server (out). В качестве целевых представлений могут выступать только те представления, в которых все столбцы ссылаются на одну таблицу. Дополнительные сведения об ограничениях, накладываемых на копирование данных в представления, см. в статье Инструкция INSERT (Transact-SQL).

-a размер_пакета
Указывает число байтов в каждом сетевом пакете, отправляемом от сервера и к серверу. Параметр конфигурации сервера можно задать с помощью SQL Server Management Studio (или sp_configure системной хранимой процедуры). Однако параметр конфигурации сервера в отдельных случаях можно изменить с помощью этого параметра. Значениеpacket_size может находиться в пределах от 4096 до 65535 байт, значение по умолчанию равно 4096.

Увеличение размера пакета может повысить производительность операций массового копирования. Если был запрошен пакет большего размера, но он не может быть предоставлен, то используется значение по умолчанию. Статистика производительности, формируемая программой bcp , показывает используемый размер пакета.

-b batch_size
Указывает количество строк в каждом пакете импортированных данных. Каждый пакет импортируется и регистрируется как отдельная транзакция, которая фиксируется после выполнения импорта всего пакета. По умолчанию импорт всех строк в файле данных выполняется в одном пакете. Чтобы распределить строки между несколькими пакетами, укажите значение batch_size меньшее, чем количество строк в файле данных. Если транзакция пакета завершится неудачно, то будет выполнен откат только операций вставки в текущем пакете. Произошедшая ошибка не затрагивает пакеты, импорт которых уже выполнен зафиксированными транзакциями.

Не используйте этот параметр в сочетании с параметром **-h"*ROWS_PER_BATCH=bb".

-c
Выполняет операцию, используя символьный тип данных. Этот параметр не запрашивает каждое поле; он используется char в качестве типа хранилища без префиксов и с \t (символ табуляции) в качестве разделителя полей и \r\n (новый символ) в качестве конца строки. -c несовместим с -w.

Дополнительные сведения см. в разделе Использование символьного формата для импорта и экспорта данных (SQL Server).

-C { ACP | OEM | RAW | code_page }
Указывает кодовую страницу данных в файле данных. code_page имеет значение, только если данные содержат charvarchar, или text столбцы со значениями символов, превышающими 127 или менее 32.

Примечание.

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

Значение кодовой страницы Description
ACP ANSI/Microsoft Windows (ISO 1252).
OEM Кодовая страница, используемая клиентом по умолчанию. Это кодовая страница, используемая по умолчанию, если не указан параметр -C .
НЕОБРАБОТАННЫЕ Преобразование из одной кодовой страницы в другую не выполняется. Этот параметр обеспечивает высокую производительность, так как преобразование не выполняется.
code_page Определенный номер кодовой страницы, например 850.

** Важно ** SQL Server не поддерживает кодовую страницу 65001 (кодировка UTF-8).

-ddatabase_name
Указывает базу данных, с которой надо соединиться. По умолчанию программа bcp.exe соединяется с пользовательской базой данных по умолчанию. Если -dуказан database_name и три имени части (database_name.schema.table, переданный в качестве первого параметра в bcp.exe), возникнет ошибка, так как невозможно указать имя базы данных дважды. Если database_name начинается с дефиса (-) или косой черты (/), не добавляйте пробел между -d именем базы данных.

-e err_file
Указывает полный путь к файлу ошибок, используемому для хранения строк, которые служебная программа bcp не может передать из файла в базу данных. Сообщения об ошибках команды bcp поступают на рабочую станцию пользователя. Если этот параметр не используется, то файл ошибок не создается.

Если параметр err_file начинается с дефиса (-) или косой черты (/), не ставьте пробел между -e и значением err_file .

-E
Указывает, что значение или значения идентификаторов в файле импортированных данных будут использоваться для столбца идентификаторов. Если значение -E не задано, значения удостоверений этого столбца в импортируемом файле данных игнорируются, а SQL Server автоматически назначает уникальные значения на основе значений начального и добавочного значения, указанные во время создания таблицы.

Если файл данных не содержит значения столбца удостоверений в таблице или представлении, используйте файл форматирования, чтобы указать, что столбец удостоверений в таблице или представлении должен пропускаться при импорте данных; SQL Server автоматически назначает уникальные значения столбца. Дополнительные сведения см. в разделе DBCC CHECKIDENT (Transact-SQL).

Для использования параметра -E необходимы специальные разрешения. Дополнительные сведения см. в подразделе "Примечания" ниже.

-f format_file
Указывает полный путь к файлу форматирования. Назначение этого параметра зависит от окружения, в котором он используется (см. далее):

  • Если параметр -f используется с параметром format , для указанной таблицы или представления создается файл с именем format_file . Чтобы создать XML-файл форматирования, укажите параметр -x . Дополнительные сведения см. в статье Создание файла форматирования (SQL Server).

  • При использовании параметра in или out для -f должен существовать файл форматирования.

    Примечание.

    Необязательно использовать файл форматирования с параметром in или out . Если параметр -f, если -n, -c-wили -N не указан, командная строка для сведений о формате и позволяет сохранять ответы в файле формата (имя файла по умолчанию — Bcp.fmt).

Если параметр format_file начинается с дефиса (-) или косой черты (/), не ставьте пробел между -e и значением format_file .

-F first_row
Указывает номер первой строки для экспорта из таблицы или импорта из файла данных. Значение параметра должно быть больше (>) 0, но меньше (<) или равно (=) общему количеству строк. Если параметр отсутствует, по умолчанию используется первая строка файла.

Параметрfirst_row может иметь положительное целое значение до 2^63-1. Аргумент-Ffirst_row имеет нумерацию, которая начинается с 1.

-h" подсказка[ ,... n] "
Указывает одну или несколько подсказок для использования во время выполнения массового импорта данных в таблицу или представление.

ORDER**(column[ASC | DESC] [,...n])**
Порядок сортировки данных в файле данных. Производительность массового импорта увеличивается, если импортируемые данные упорядочены согласно кластеризованному индексу таблицы (при наличии). Если файл данных отсортирован в порядке, отличном от порядка ключа кластеризованного индекса, или если в таблице отсутствует кластеризованный индекс, то предложение ORDER пропускается. В целевой таблице должны быть указаны имена столбцов. По умолчанию программа bcp предполагает, что файл данных не упорядочен. Для оптимизированного массового импорта SQL Server также проверяет, отсортированы ли импортированные данные.

ROWS_PER_BATCH =bb
Количество строк данных в каждом пакете (значение bb). Используется в случае, если не указан параметр -b , что приводит к тому, что весь файл данных отправляется на сервер в ходе одной транзакции. Сервер оптимизирует массовую загрузку в соответствии со значением bb. По умолчанию значение аргумента ROWS_PER_BATCH неизвестно.

= KILOBYTES_PER_BATCH cc
Приблизительный объем данных в каждом пакете в килобайтах (значение cc). По умолчанию значение KILOBYTES_PER_BATCH неизвестно.

TABLOCK
Указывает, что при выполнении массового обновления на период операции массовой загрузки будет получена блокировка на уровне таблицы. В противном случае запрашивается блокировка на уровне строки. Применение этого указания значительно повышает производительность, так как удержание блокировки в течение операции массового копирования уменьшает вероятность состязаний блокировок в таблице. Если таблица не имеет индексов и указано ключевое слово TABLOCK , загрузка в таблицу может производиться параллельно несколькими клиентами. По умолчанию работа блокировки определяется параметром таблицы table lock on bulk load.

CHECK_CONSTRAINTS
Указывает, что при выполнении операции массового импорта будет выполняться проверка всех ограничений целевой таблицы или представления. Если указание CHECK_CONSTRAINTS не задано, то все ограничения CHECK и FOREIGN KEY пропускаются, и после выполнения операции ограничение таблицы отмечается как ненадежное.

Примечание.

Ограничения UNIQUE, PRIMARY KEY и NOT NULL проверяются в любом случае.

На некотором этапе понадобится проверить ограничения во всей таблице. Если таблица была непустой до операции массового импорта данных, стоимость повторной проверки правильности ограничения может превысить стоимость применения ограничений CHECK к добавочным данным. Поэтому корпорация Майкрософт рекомендует включить проверку ограничений во время выполнения добавочного массового импорта данных.

Отключение проверки ограничений (настройка по умолчанию) может потребоваться в тех ситуациях, когда входные данные содержат строки, нарушающие эти ограничения. Импорт данных можно выполнить с отключенными ограничениями CHECK, после чего использовать инструкции языка Transact-SQL для удаления недопустимых значений.

Примечание.

Теперь программаbcp производит проверку данных, которые могут привести к ошибкам в работе существующих скриптов, если файлы данных будут содержать недопустимые данные.

Примечание.

Параметр -m максимальное_количество_ошибок не применяется при проверке ограничений.

FIRE_TRIGGERS
Применяется вместе с аргументом in и указывает, что в течение операции массового копирования будут работать триггеры Insert, определенные в целевой таблице. Если параметр FIRE_TRIGGERS не указан, то триггеры Insert выполняться не будут. Параметр FIRE_TRIGGERS для аргументов out, queryoutи format не учитывается.

-i входной_файл
Указывает имя файла ответа, содержащего ответы на вопросы командной строки для каждого поля данных при выполнении массового копирования с помощью интерактивного режима (-n, -c-wили -N).

Если параметр input_file начинается с дефиса (-) или косой черты (/), не ставьте пробел между -e и значением input_file .

-k
Указывает, что пустые столбцы во время данной операции должны сохранить значение NULL вместо любых вставляемых значений столбцов по умолчанию. Дополнительные сведения см. в разделе Сохранение значений Null или использование значений по умолчанию при массовом импорте данных (SQL Server).

-K намерение_приложения
Объявляет тип рабочей нагрузки приложения при соединении с сервером. Единственным возможным значением является ReadOnly. Если параметр -K не указан, программа bcp не будет поддерживать соединение с вторичной репликой в группе доступности AlwaysOn. Дополнительные сведения см. в разделе "Активные вторичные реплики: доступные для чтения вторичные реплики" (группы доступности AlwaysOn).

-L last_row
Указывает номер последней строки для экспорта из таблицы или импорта из файла данных. Значение параметра должно быть больше (>) 0, но меньше (<) или равно (=) номеру последней строки. Если параметр отсутствует, по умолчанию используется последняя строка файла.

Параметрlast_row может иметь положительное целое значение до 2^63-1.

-m max_errors
Указывает максимальное количество синтаксических ошибок, которые могут произойти до отмены операции bcp . Синтаксическая ошибка подразумевает ошибку преобразования данных в целевой тип данных. В общее количество ошибок max_errors не включаются ошибки, которые могут быть обнаружены только на сервере, например нарушения ограничений.

Строка, которую нельзя скопировать с помощью программы bcp , не обрабатывается и считается одной ошибкой. Если параметр не указан, то используется значение по умолчанию, равное 10.

Примечание.

Параметр -m также не применяется для преобразования money типов данных или bigint типов данных.

-n
Выполняет операцию массового копирования, используя собственные типы данных (базы данных). Этот параметр не запрашивает тип данных для каждого поля, он использует собственные значения.

Дополнительные сведения см. в разделе Использование собственного формата для импорта и экспорта данных (SQL Server).

-N
Выполняет операцию массового копирования, используя собственные типы данных (базы данных) для несимвольных данных и символы Юникода для символьных данных. Этот параметр предлагает более высокую производительность -w , а также предназначен для передачи данных из одного экземпляра SQL Server в другой с помощью файла данных. Он не запрашивает тип данных каждого поля. Используйте этот параметр при передаче данных, которые содержат символы национального алфавита ANSI, а также, чтобы повысить производительность работы в собственном режиме.

Дополнительные сведения см. в разделе Использование собственного формата Юникод для импорта и экспорта данных (SQL Server).

При экспорте и импорте данных в ту же схему таблицы с помощью bcp.exe с -N может появиться предупреждение об усечения, если имеется фиксированный столбец символов, отличный от Юникода (например, char(10)).

Это предупреждение можно пропустить. Одним из способов его устранения является применение аргумента командной строки -n вместо -N.

-o выходной_файл
Указывает имя файла, который принимает перенаправленные из командной строки выходные данные.

Если параметр output_file начинается с дефиса (-) или косой черты (/), не ставьте пробел между -e и значением output_file .

-P пароль
Указывает пароль для идентификатора имени входа. Если данный параметр не указан, команда bcp запрашивает пароль. Если этот параметр используется в конце командной строки без указания пароля, программа bcp применяет пароль по умолчанию (NULL).

Внимание

Не используйте пустые пароли. Выбирайте надежные пароли.

Чтобы скрыть пароль, не указывайте параметр -P вместе с параметром -U . Вместо этого после ввода команды bcp с параметром -U и другими параметрами (не указывая -P) нажмите клавишу ВВОД, и команда предложит ввести пароль. Этот метод обеспечивает скрытие пароля при вводе.

Если параметр password начинается с дефиса (-) или косой черты (/), не включайте пробел между -P и значением password .

-q
Выполняет инструкцию SET QUOTED_IDENTIFIERS ON в соединении между служебной программой bcp и экземпляром SQL Server. Используйте этот параметр для указания базы данных, владельца, таблицы или имени представления, содержащих пробел или одинарную кавычку. Заключите все имя таблицы или представления, состоящее из трех частей, в кавычки ("").

Чтобы указать имя базы данных, содержащее пробел или одинарные кавычки, следует использовать параметр -q.

-q не применяется к значениям, переданным в -d.

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

-r row_term
Указывает признак конца строки. Значением по умолчанию является \n (символ перевода строки). Используйте этот параметр, чтобы переопределить признак конца строки по умолчанию. Дополнительные сведения см. в разделе Определение признаков конца поля и строки (SQL Server).

Если в команде bcp.exe указан признак конца строки в шестнадцатеричном виде, то значение будет усечено до 0x00. Например, если указать значение 0x410041, то будет использовано значение 0x41.

Если параметр row_term начинается с дефиса (-) или косой черты (/), не ставьте пробел между -r и значением row_term .

-R
Указывает, что данные валюты, даты и времени массово копируются в SQL Server с помощью регионального формата, определенного для параметра языкового стандарта клиентского компьютера. По умолчанию региональные настройки не учитываются.

-S server_name[\ instance_name]
Указывает экземпляр SQL Server, к которому выполняется подключение. Если сервер не указан, программа bcp подключается к экземпляру SQL Server по умолчанию на локальном компьютере. Этот параметр необходим, если команда bcp выполняется с удаленного компьютера в сети или с локального именованного экземпляра. Чтобы подключиться к экземпляру SQL Server по умолчанию на сервере, укажите только server_name. Чтобы подключиться к именованному экземпляру SQL Server, укажите server_name*\*instance_name.

-tfield_term
Указывает признак конца поля. Значением по умолчанию является \t (символ табуляции). Используйте этот параметр, чтобы переопределить признак конца поля по умолчанию. Дополнительные сведения см. в разделе Определение признаков конца поля и строки (SQL Server).

Если в команде bcp.exe указан признак конца поля в шестнадцатеричном виде, то значение будет усечено до 0x00. Например, если указать значение 0x410041, то будет использовано значение 0x41.

Если field_term начинается с дефиса (-) или косой черты (/), не включайте пробел между -t field_term значением.

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

-U имя_для_входа
Указывает идентификатор входа, используемый для подключения к SQL Server.

Внимание

Если программа bcp подключается к SQL Server с доверенным подключением с помощью встроенной безопасности, используйте параметр -T (доверенное подключение) вместо имени пользователя и сочетания паролей.

-v
Выводит номер версии и сведения об авторских правах для служебной программы bcp .

-V (80 | 90 | 100| 110)
Выполняет операцию массового копирования с помощью типов данных из более ранней версии SQL Server. Этот параметр не запрашивает тип данных каждого поля, он использует значения по умолчанию.

80 = SQL Server 2000

90 = SQL Server 2005

100 = SQL Server 2008 и SQL Server 2008 R2

110 = SQL Server 2012

Например, чтобы создать данные для типов, которые не поддерживаются SQL Server 2000, но были введены в более поздних версиях SQL Server, используйте параметр -V80.

Дополнительные сведения см. в разделе Импорт данных в собственном и символьном формате из предыдущих версий SQL Server.

-w
Выполняет операцию массового копирования, используя символы Юникода. Этот параметр не запрашивает каждое поле; он используется nchar в качестве типа хранилища, без префиксов, \t (символ табуляции) в качестве разделителя полей и \n (символ новой строки) в качестве конца строки. -w несовместим с -c.

Дополнительные сведения см. в разделе Использование символьного формата Юникод для импорта и экспорта данных (SQL Server).

-x
При использовании вместе с параметрами format и -fformat_file приводит к созданию файла форматирования на основе XML. По умолчанию создается файл форматирования в формате, отличном от XML. Параметр -x не работает при импорте или экспорте данных. Применение этого параметра без параметров format и -fformat_file приведет к ошибке.

Замечания

Клиент bcp 12.0 устанавливается при установке средств MicrosoftSQL Server 2014. Если средства установлены как для SQL Server 2014, так и более ранней версии SQL Server в зависимости от значения переменной среды PATH, вы можете использовать более ранний клиент bcp вместо клиента bcp 12.0. Переменная среды определяет набор каталогов, используемых Windows для поиска исполняемых файлов. Чтобы определить используемую версию, запустите в командной строке Windows команду bcp /v . Сведения о настройке пути для команды в переменной среды PATH см. в справке Windows.

XML-файлы форматирования поддерживаются только в том случае, если средства SQL Server устанавливаются вместе с собственным клиентом SQL Server.

Сведения о том, как найти и запустить программу bcp, а также соглашения о синтаксисе программ командной строки см. в статье Справочник по программе командной строки (ядро СУБД).

Дополнительные сведения о подготовке данных к массовому импорту или экспорту см. в статье Подготовка данных к массовому экспорту или импорту (SQL Server).

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

Поддержка собственного формата файлов данных

В SQL Server 2014 программа bcp поддерживает собственные файлы данных, совместимые с SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2 и SQL Server 2012.

Вычисляемые столбцы и столбцы типа timestamp

Значения в импортируемом файле данных для вычисляемых или timestamp столбцов игнорируются, а SQL Server автоматически назначает значения. Если файл данных не содержит значения для вычисляемых или timestamp столбцов в таблице, используйте файл форматирования, чтобы указать, что вычисляемые или timestamp столбцы в таблице должны пропускаться при импорте данных; SQL Server автоматически назначает значения столбца.

Вычисляемые и timestamp столбцы копируются из SQL Server в файл данных как обычно.

Указание идентификаторов, содержащих пробелы или кавычки

Идентификаторы SQL Server могут включать такие символы, как внедренные пробелы и кавычки. Такие идентификаторы должны обрабатываться следующим образом.

  • Если идентификатор или имя файла содержит пробел или кавычку в командной строке, заключите идентификатор в двойные кавычки ("").

    Например, следующая команда bcp out создает файл данных с именем Currency Types.dat:

    bcp AdventureWorks2012.Sales.Currency out "Currency Types.dat" -T -c  
    
  • Чтобы указать имя базы данных, содержащее пробел или кавычки, необходимо использовать параметр -q.

  • Для имен владельца, таблицы или представления, содержащих внедренные пробелы или кавычки, также можно:

    • указать параметр -q; или

    • заключить имя владельца, таблицы или представления в квадратные скобки ([]) внутри кавычек.

Проверка данных

Теперь программаbcp производит проверку данных, которые могут привести к ошибкам в работе существующих скриптов, если файлы данных будут содержать недопустимые данные. Например, программа bcp проверяет, что:

  • собственные представления типов данных float или real являются допустимыми;

  • Данные в Юникоде имеют четную длину.

Формы недопустимых данных, которые могут быть массово импортированы в более ранних версиях SQL Server, могут не загружаться сейчас; В то время как в более ранних версиях сбой не возникал до тех пор, пока клиент не пытался получить доступ к недопустимым данным. Добавленная проверка снижает вероятность непредвиденных ситуаций во время запроса данных после массовой загрузки.

Массовый экспорт или импорт документов SQLXML

Чтобы выполнить массовый экспорт или импорт SQLXML-данных используйте один из следующих типов данных в файле форматирования:

Тип данных Действие
SQLCHAR или SQLVARYCHAR Данные отправляются в кодовой странице клиента или кодовой странице, определенной параметрами сортировки. Результат тот же, что и при указании параметра -c без указания файла форматирования.
SQLNCHAR или SQLNVARCHAR Данные отправляются в Юникоде. Результат тот же, что и при указании параметра -w без указания файла форматирования.
SQLBINARY или SQLVARYBIN Данные отправляются без преобразования.

Разрешения

Для операции bcpout необходимо разрешение SELECT на исходную таблицу.

Для операции bcpin необходимы как минимум разрешения SELECT/INSERT на целевую таблицу. Кроме того, разрешение ALTER TABLE необходимо в следующих случаях.

  • Ограничения существуют, а указание CHECK_CONSTRAINTS не задано.

    Примечание.

    Ограничения отключены по умолчанию. Чтобы явно включить ограничения, используйте параметр -h с подсказкой CHECK_CONSTRAINTS.

  • Триггеры существуют, а указание FIRE_TRIGGER не задано.

    Примечание.

    По умолчанию, триггеры не срабатывают. Чтобы запустить триггеры явно, используйте параметр -h с подсказкой FIRE_TRIGGERS.

  • Используйте параметр -E , чтобы выполнить импорт значений идентификаторов из файла данных.

Примечание.

Требование разрешения ALTER TABLE для целевой таблицы было новым в SQL Server 2005. Если у учетной записи пользователя нет разрешений ALTER на целевую таблицу, это новое требование может привести к ошибке скриптов bcp , не применяющих принудительно триггеры и проверку ограничений.

Рекомендации для символьного режима (-c) и собственного режима (-n)

Этот раздел содержит рекомендации для символьного режима (-c) и собственного режима (-n).

  • (Администратор/пользователь) Если возможно, используйте собственный формат (-n) во избежание проблем с разделением. Используйте собственный формат для экспорта и импорта с помощью SQL Server. Экспортируйте данные из SQL Server с помощью параметра -c или -w, если данные будут импортированы в базу данных, отличной от SQL Server.

  • (Администратор) Проверьте данные при использовании BCP OUT. Например, при использовании BCP OUT, BCP IN, а затем BCP OUT убедитесь, что данные экспортируются правильно и значения признака конца не используются как часть какого-либо значения данных. Попробуйте переопределить признаки конца по умолчанию (с помощью параметров -t и - r) на случайные шестнадцатеричные значения, чтобы избежать конфликта между значениями признака конца и значениями данных.

  • (Пользователь) Используйте длинные и уникальные признаки конца (любая последовательность байт или символов), чтобы свести к минимуму возможность конфликта с фактическим строковым значением. Это можно выполнить с помощью параметров -t и -r.

Примеры

Этот раздел содержит следующие примеры.

  • А. Копирование строк из таблицы в файл данных (с помощью доверительного соединения)

  • B. Копирование строк из таблицы в файл данных (в смешанном режиме проверки подлинности)

  • C. Копирование данных из файла в таблицу

  • D. Копирование отдельного столбца в файл данных

  • Е. Копирование отдельной строки в файл данных

  • F. Копирование данных из запроса в файл данных

  • G. Создание файла форматирования в формате, отличном от XML

  • H. Создание XML-файла форматирования

  • I. Использование файла форматирования для массового импорта данных c помощью программы bcp

А. Копирование строк из таблицы в файл данных (с помощью доверительного соединения)

В следующем примере показано применение параметра out к таблице AdventureWorks2012.Sales.Currency . В этом примере создается файл данных с именем Currency.dat и в него копируются данные таблицы в символьном формате. В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

В командной строке введите следующую команду:

bcp AdventureWorks2012.Sales.Currency out Currency.dat -T -c  

B. Копирование строк из таблицы в файл данных (в смешанном режиме проверки подлинности)

В следующем примере показано применение параметра out к таблице AdventureWorks2012.Sales.Currency . В этом примере создается файл данных с именем Currency.dat и в него копируются данные таблицы в символьном формате.

В этом примере предполагается, что применяется смешанный режим проверки подлинности. Для указания идентификатора входа необходимо использовать параметр -U . Кроме того, если вы не подключаетесь к экземпляру SQL Server по умолчанию на локальном компьютере, используйте параметр -S , чтобы указать имя системы и, при необходимости, имя экземпляра.

bcp AdventureWorks2012.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>  

Система предложит ввести пароль.

C. Копирование данных из файла в таблицу

В следующем примере показано применение параметра in с файлом, созданным в предыдущем примере (Currency.dat). Тем не менее, сначала в этом примере создается пустая копия таблицы AdventureWorks2012 Sales.Currency, Sales.Currency2, в которую копируются данные. В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

Чтобы создать пустую таблицу, введите следующую команду в редакторе запросов:

USE AdventureWorks2012;  
GO  
SELECT * INTO AdventureWorks2012.Sales.Currency2   
FROM AdventureWorks2012.Sales.Currency WHERE 1=2;  

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

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -c  

Чтобы убедиться в успешном выполнении команды, отобразите в редакторе запросов содержимое таблицы и введите:

USE AdventureWorks2012;  
GO  
SELECT * FROM Sales.Currency2  

D. Копирование отдельного столбца в файл данных

Чтобы выполнить копирование конкретного столбца, можно использовать параметр queryout . Следующий пример копирует в файл данных из таблицы Name только столбец Sales.Currency . В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

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

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c  

Е. Копирование отдельной строки в файл данных

Чтобы выполнить копирование конкретной строки, можно использовать параметр queryout . В следующем примере копируется только строка контакта с именем Jarrod Rana из таблицы AdventureWorks2012.Person.Person в файл данных (Jarrod Rana.dat). В этом примере предполагается, что используется проверка подлинности Windows и существует доверенное соединение с экземпляром сервера, на котором запускается команда bcp.

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

bcp "SELECT * FROM AdventureWorks2012.Person.Person WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c  

F. Копирование данных из запроса в файл данных

Результирующий набор инструкции Transact-SQL копируется в файл данных с помощью параметра queryout . Следующий пример копирует имена из таблицы AdventureWorks2012.Person.Person , упорядоченные по фамилии и далее по имени, в файл данных Contacts.txt . В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

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

bcp "SELECT FirstName, LastName FROM AdventureWorks2012.Person.Person ORDER BY LastName, Firstname" queryout Contacts.txt -c -T  

G. Создание файла форматирования в формате, отличном от XML

В следующем примере создается файл форматирования, отличный от XML, Currency.fmtдля Sales.Currency таблицы в базе данных AdventureWorks2012 . В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

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

bcp AdventureWorks2012.Sales.Currency format nul -T -c  -f Currency.fmt  

Дополнительные сведения см. в разделе файлов форматирования, отличных от XML (SQL Server).

H. Создание XML-файла форматирования

В следующем примере создается XML-файл форматирования с именем Currency.xml таблицы в базе данных AdventureWorks2012.Sales.Currency В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

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

bcp AdventureWorks2012.Sales.Currency format nul -T -c -x -f Currency.xml  

Примечание.

Для использования параметра -x необходима версия клиента bcp 9.0. Дополнительные сведения об использовании клиента bcp 9.0 см. в разделе "Примечания".

Дополнительные сведения см. в разделе XML Format Files (SQL Server) (SQL Server).

I. Использование файла форматирования для массового импорта данных c помощью программы bcp

Чтобы использовать ранее созданный файл форматирования при импорте данных в экземпляр SQL Server, используйте параметр -f с параметром in . Например, следующая команда выполняет массовое копирование содержимого файла данных Currency.dat в копию таблицы Sales.Currency (Sales.Currency2) с помощью ранее созданного файла форматирования (Currency.xml). В этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp .

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

bcp AdventureWorks2012.Sales.Currency2 in Currency.dat -T -f Currency.xml  

Примечание.

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

Дополнительные примеры

Следующие разделы содержат примеры использования программы bcp:

См. также

Подготовка данных к массовому экспорту или импорту (SQL Server)
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
SET QUOTED_IDENTIFIER (Transact-SQL)
sp_configure (Transact-SQL)
sp_tableoption (Transact-SQL)
Файлы форматирования для импорта или экспорта данных (SQL Server)