Программа bcp

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

Сведения об использовании программы bcp в Linux см. в статье Установка программ командной строки SQL Server sqlcmd и bcp в Linux.

Подробные сведения об использовании программы bcp с Azure Synapse Analytics см. в статье Загрузка данных с bcp.

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

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

Примечание

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

Скачивание последней версии программы bcp

Инструменты командной строки предоставляются в общедоступной версии, тем не менее они выпускаются вместе с пакетом установщика для SQL Server 2019 (15.x).

Сведения о версии

Номер выпуска: 15.0.4298.1
Номер сборки: 15.0.4298.1
Дата выпуска: 7 апреля 2023 г.

Новая версия SQLCMD поддерживает проверку подлинности Azure AD, в том числе многофакторную проверку подлинности (MFA) для базы данных SQL, Azure Synapse Analytics и функции Always Encrypted. Новая версия программы BCP поддерживает проверку подлинности Azure AD, в том числе многофакторную проверку подлинности (MFA) для базы данных SQL и Azure Synapse Analytics.

Требования к системе

Windows 11, Windows 10, Windows 7, Windows 8, Windows 8.1, Windows Server 2008, Windows Server 2008 R2, Windows Server 2008 R2 SP1, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022

Этот компонент требует наличия установщика Windows версии 4.5 и драйвера Microsoft ODBC 17 для SQL Server.

Чтобы проверка версию BCP, выполните bcp /v команду и убедитесь, что используется версия 15.0.4298.1 или выше.

Синтаксис
bcp [database_name.] schema.{table_name | view_name | "query"}
    {in data_file | out data_file | queryout data_file | format nul}
                                                                                                         
    [-a packet_size]
    [-b batch_size]
    [-c]
    [-C { ACP | OEM | RAW | code_page } ]
    [-d database_name]
    [-D]
    [-e err_file]
    [-E]
    [-f format_file]
    [-F first_row]
    [-G Azure Active Directory Authentication]
    [-h"hint [,...n]"]
    [-i input_file]
    [-k]
    [-K application_intent]
    [-l login_timeout]
    [-L last_row]
    [-m max_errors]
    [-n]
    [-N]
    [-o output_file]
    [-P password]
    [-q]
    [-r row_term]
    [-R]
    [-S [server_name[\instance_name]]
    [-t field_term]
    [-T]
    [-U login_id]
    [-v]
    [-V (80 | 90 | 100 | 110 | 120 | 130 ) ]
    [-w]
    [-x]

Аргументы

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

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

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

inфайл_данных | outфайл_данных | queryoutфайл_данных | format nul.
Указывает направление массового копирования следующим образом:

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

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

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

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

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

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

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

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

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

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

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

-bbatch_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 имеет смысл только в том случае, если данные содержат столбцы типа char, varcharили text с символами, коды которых больше 127 или меньше 32.

Примечание

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

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

Версии раньше 13 (SQL Server 2016 (13.x);) не поддерживают кодовую страницу 65001 (кодировка UTF-8). Начиная с версии 13, кодировку UTF-8 можно импортировать в более ранние версии SQL Server.

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

-D
Значение, передаваемое в параметр bcp-S, интерпретируется как имя источника данных (DSN). DSN может использоваться для внедрения параметров драйвера для упрощения командных строк, применения параметров драйвера, которые недоступны иным образом из командной строки, например MultiSubnetFailover, или для защиты конфиденциальных учетных данных от обнаружения в качестве аргументов командной строки. Дополнительные сведения см. в разделе Поддержка имени DSN в sqlcmd и bcp статьи Соединение с помощью sqlcmd.

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

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

-E

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

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

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

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

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

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

-G

Клиент использует этот переключатель при подключении к базе данных SQL Azure или Azure Synapse Analytics, чтобы указать, что проверка подлинности пользователя выполняется с помощью Azure Active Directory. Для использования аргумента -G требуется версия 14.0.3008.27 или выше. Чтобы определить версию, выполните команду bcp -v. Дополнительные сведения см. в статье Использование проверки подлинности Azure Active Directory для базы данных SQL или Azure Synapse Analytics.

Важно!

Параметр -G применяется только для Базы данных SQL Azure и Azure Synapse Analytics. Интерактивная проверка подлинности AAD в Linux и macOS в настоящее время не поддерживается. Для встроенной проверки подлинности AAD требуется драйвер Microsoft ODBC 17 for SQL Server версии 17.6.1 или более поздней, а также правильно настроенная среда Kerberos.

Совет

Чтобы узнать, поддерживает ли ваша версия программы bcp проверку подлинности Azure Active Directory (AAD), введите bcp -- (bcp<пробел><тире><тире>) и убедитесь, что в списке доступных аргументов отображается -G.

  • Имя пользователя и пароль Azure Active Directory

    Если вы хотите использовать имя пользователя и пароль Azure Active Directory, можно указать параметр -G , а также использовать имя пользователя и пароль, задав параметры -U и -P .

    В приведенном ниже примере показан экспорт данных с помощью имени пользователя и пароля Azure AD, которые являются учетными данными AAD. Здесь показана процедура экспорта таблицы bcptest из базы данных testdb на сервере Azure aadserver.database.windows.net и сохранения данных в файле c:\last\data1.dat:

    bcp bcptest out "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    

    В приведенном ниже примере показан импорт данных с помощью имени пользователя и пароля Azure AD, которые являются учетными данными AAD. Здесь показана процедура импорта данных из файла c:\last\data1.dat в таблицу bcptest базы данных testdb на сервере Azure aadserver.database.windows.net с помощью имени пользователя и пароля Azure AD:

    bcp bcptest in "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    
  • Встроенная проверка подлинности Azure Active Directory

    Чтобы использовать встроенную проверку подлинности Azure Active Directory, укажите параметр -G без имени пользователя или пароля. В этой конфигурации предполагается, что текущая учетная запись пользователя Windows (учетная запись, в которой выполняется команда bcp) включена в федерацию с Azure AD.

    В приведенном ниже примере показан экспорт данных с использованием учетной записи с Azure AD. Здесь показана процедура экспорта таблицы bcptest из базы данных testdb с помощью учетной записи с Azure AD с сервера Azure aadserver.database.windows.net и сохранения данных в файле c:\last\data2.dat:

    bcp bcptest out "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c -t
    

    В приведенном ниже примере показан импорт данных с помощью встроенной проверки подлинности Azure AD. Здесь показана процедура импорта данных из файла c:\last\data2.txt в таблицу bcptest базы данных testdb на сервере Azure aadserver.database.windows.net с помощью встроенной проверки подлинности Azure AD:

    bcp bcptest in "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c -t
    
  • Интерактивная проверка подлинности Azure Active Directory

    Интерактивная проверка подлинности Azure AD для Базы данных SQL Azure и Azure Synapse Analytics позволяет использовать интерактивный метод, поддерживающий многофакторную проверку подлинности. Дополнительные сведения см. в разделе Интерактивная проверка подлинности Active Directory.

    Для интерактивного режима Azure AD требуется программа bcpверсии 15.0.1000.34 или выше, а также ODBC версии 17.2 или выше.

    Чтобы включить интерактивную проверку подлинности, укажите аргумент -G только с именем пользователя (-U) без пароля.

    В приведенном ниже примере данные экспортируются с помощью интерактивного режима Azure AD с указанием имени пользователя, который представляет собой учетную запись AAD. Это тот же пример, который использовался в предыдущем разделе: Имя пользователя и пароль Azure Active Directory.

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

    bcp bcptest out "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com
    

    Если пользователь Azure AD является федеративным пользователем домена с учетной записью Windows, имя пользователя, необходимое в командной строке, содержит учетную запись домена (например, joe@contoso.com; см. ниже):

    bcp bcptest out "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U joe@contoso.com
    

    Если гостевые пользователи есть в определенной службе Azure AD и являются частью группы, которая существует в Базе данных SQL с разрешением на выполнение команды bcp, будет использоваться псевдоним гостевого пользователя (например, keith0@adventureworks.com ).

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

    Примечание

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

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

    Примечание

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

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

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

    Примечание

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

    Примечание

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

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

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

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

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

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

-llogin_timeout
Указывает время ожидания входа. Параметр -l задает время ожидания (в секундах) для входа в SQL Server при попытке соединения с сервером. Значение времени ожидания по умолчанию — 15 секунд. Время ожидания входа должно быть числом в диапазоне от 0 до 65 534. Если указанное значение не является числом или выходит за пределы указанного диапазона, bcp выдает сообщение об ошибке. Значение 0 указывает на бесконечное время ожидания.

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

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

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

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

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

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

Важно!

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

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

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

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

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

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

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

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

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

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

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

-Sserver_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 начинается с дефиса (-) или косой черты (/), не ставьте пробел между -r и значением field_term .

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

Важно!

Если программа bcp подключается к SQL Server с помощью доверенного соединения, используя встроенную безопасность, укажите параметр -T (доверенное соединение) вместо сочетания параметров user name и password . Когда программа bcp подключается к базе данных SQL или Azure Synapse Analytics, использование проверки подлинности Windows или Azure Active Directory не поддерживается. Используйте параметры -U и -P .

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

Важно!

Если программа bcp подключается к SQL Server с помощью доверенного соединения, используя встроенную безопасность, укажите параметр -T (доверенное соединение) вместо сочетания параметров user name и password . Когда программа bcp подключается к базе данных SQL или Azure Synapse Analytics, использование проверки подлинности Windows или Azure Active Directory не поддерживается. Используйте параметры -U и -P .

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

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

80 = SQL Server 2000 (8.x)

90 = SQL Server 2005 (9.x)

100 = SQL Server 2008 (10.0.x) и SQL Server 2008 R2 (10.50.x)

110 = SQL Server 2012 (11.x)

120 = SQL Server 2014 (12.x)

130 = SQL Server 2016 (13.x)

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

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

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

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

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

Комментарии

  • Программа bcp 13.0 устанавливается при установке средств Microsoft SQL Server 2019 (15.x). Если установлены средства для нескольких версий SQL Server, то в зависимости от значения переменной среды PATH возможно, что вместо bcp 13.0 вы используете более раннюю версию клиента bcp. Переменная среды определяет набор каталогов, используемых Windows для поиска исполняемых файлов. Чтобы определить используемую версию, выполните в командной строке Windows команду bcp /v или bcp -v. Чтобы получить информацию о том, как задать путь к команде в переменной среды PATH, обратитесь к разделу Переменные среды или выполните поиск по запросу "Переменные среды" в справке Windows.

    Чтобы при запуске использовалась последняя версия программы bcp, необходимо удалить все более старые версии программы bcp.

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

    where bcp.exe
    
  • Служебную программу bcp можно скачать отдельно от пакета дополнительных компонентов Microsoft SQL Server 2016. Выберите ENU\x64\MsSqlCmdLnUtils.msi или ENU\x86\MsSqlCmdLnUtils.msi.

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

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

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

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

  • Использование дополнительных специальных символов

    Символы <, >, |, &, ^ являются специальными символами командной оболочки, поэтому необходимо перед ними указать escape-символы (^) или заключить их в кавычки (например, "StringContaining&Symbol"). Если строка, содержащая специальный символ, заключена в кавычки, кавычки необходимо указывать как часть значения переменной среды.

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

В SQL Server программа bcp поддерживает только собственные файлы данных, совместимые с версиями SQL Server начиная с SQL Server 2000 (8.x).

Вычисляемые столбцы и столбцы типа 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 Данные отправляются без преобразования.

Разрешения

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

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

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

    Примечание

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

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

    Примечание

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

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

Примечание

Необходимость наличия разрешения ALTER TABLE на целевую таблицу было новой особенностью SQL Server 2005 (9.x). Если у учетной записи пользователя нет разрешений 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.

Примеры

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

A. Определение версии служебной программы bcp

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

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

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

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

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

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

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

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

К. Указание кодовой страницы

Пример условий теста

В примерах ниже используется образец базы данных WideWorldImporters для SQL Server (начиная с 2016) и База данных SQL Azure. WideWorldImporters можно скачать отсюда: https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. Синтаксис для восстановления образца базы данных см. в разделе RESTORE (Transact-SQL) . Если не указано иное, в этом примере предполагается, что используется проверка подлинности Windows и существует доверительное подключение к экземпляру сервера, на котором запускается команда bcp . Каталог с именем D:\BCP будет использоваться во многих примерах.

Приведенный ниже скрипт создает пустую копию таблицы WideWorldImporters.Warehouse.StockItemTransactions , а затем добавляет ограничение первичного ключа. Запустите следующий скрипт T-SQL в SQL Server Management Studio (SSMS):

USE WideWorldImporters;
GO

SET NOCOUNT ON;

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
    SELECT * INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
    FROM WideWorldImporters.Warehouse.StockItemTransactions
    WHERE 1 = 2;

    ALTER TABLE Warehouse.StockItemTransactions_bcp
    ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp PRIMARY KEY NONCLUSTERED
    (StockItemTransactionID ASC);
END

Примечание

Усеките таблицу StockItemTransactions_bcp по мере необходимости.

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

A. Определение версии служебной программы bcp

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

bcp -v

Б. Копирование строк таблицы в файл данных (с доверенным подключением)

В следующих примерах показано применение параметра out к таблице WideWorldImporters.Warehouse.StockItemTransactions.

  • Базовый В этом примере создается файл данных с именем StockItemTransactions_character.bcp, и в него копируются данные таблицы в символьном формате.

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -T
    
  • Расширенный В этом примере создается файл данных с именем StockItemTransactions_native.bcp, и в него копируются данные таблицы в собственном формате. Пример также указывает максимальное количество синтаксических ошибок, файл ошибок и выходной файл.

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\BCP\StockItemTransactions_native.bcp -m 1 -n -e D:\BCP\Error_out.log -o D:\BCP\Output_out.log -S -T
    

Просмотрите Error_out.log и Output_out.log. Error_out.log должно быть пустым. Сравните размеры файлов между StockItemTransactions_character.bcp и StockItemTransactions_native.bcp.

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

В следующем примере показано применение параметра out к таблице WideWorldImporters.Warehouse.StockItemTransactions . В этом примере создается файл данных с именем StockItemTransactions_character.bcp , и в него копируются данные таблицы в символьном формате.

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

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

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>

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

В следующих примерах показано применение параметра in к таблице WideWorldImporters.Warehouse.StockItemTransactions_bcp с использованием созданных выше файлов.

  • Базовый В этом примере используется ранее созданный файл данных StockItemTransactions_character.bcp.

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\BCP\StockItemTransactions_character.bcp -c -T
    
  • Расширенный В этом примере используется ранее созданный файл данных StockItemTransactions_native.bcp. Пример также использует указание TABLOCK, указывает размер пакета, максимальное количество синтаксических ошибок, файл ошибок и выходной файл.

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

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\BCP\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\BCP\Error_in.log -o D:\BCP\Output_in.log -S -T

Просмотрите Error_in.log и Output_in.log.

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

Чтобы выполнить копирование конкретного столбца, можно использовать параметр queryout . Следующий пример копирует в файл данных из таблицы StockItemTransactionID только столбец Warehouse.StockItemTransactions .

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

bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\BCP\StockItemTransactionID_c.bcp -c -T

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

Чтобы выполнить копирование конкретной строки, можно использовать параметр queryout . Следующий пример копирует только строку человека с именем Amy Trefl из таблицы WideWorldImporters.Application.People в файл данных Amy_Trefl_c.bcp. Примечание. Параметр -d используется для идентификации базы данных.

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

bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\BCP\Amy_Trefl_c.bcp -d WideWorldImporters -c -T

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

Результирующий набор инструкции Transact-SQL копируется в файл данных с помощью параметра queryout . Следующий пример копирует имена из таблицы WideWorldImporters.Application.People , упорядоченные по полному имени, в файл данных People.txt . Примечание. Параметр -t используется для создания файла с разделителями-запятыми.

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

bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\BCP\People.txt -t, -c -T

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

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

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

REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\BCP\StockItemTransactions_c.fmt -c -T

REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\BCP\StockItemTransactions_n.fmt -n -T

REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\BCP\StockItemTransactions_c.xml -x -c -T

Примечание

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

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

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

Чтобы использовать ранее созданный файл форматирования при выполнении импорта данных в экземпляр SQL Server, укажите параметр -f и параметр in . Например, следующая команда выполняет массовое копирование содержимого файла данных StockItemTransactions_character.bcpв копию таблицы Warehouse.StockItemTransactions_bcp с помощью ранее созданного файла форматирования StockItemTransactions_c.xml. Примечание. Параметр -L используется для импорта только первых 100 записей.

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

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\BCP\StockItemTransactions_character.bcp -L 100 -f D:\BCP\StockItemTransactions_c.xml -T

Примечание

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

К. Указание кодовой страницы

В следующем фрагменте кода показан импорт bcp с указанием страницы кода 65001:

bcp.exe MyTable in "D:\data.csv" -T -c -C 65001 -t , ...

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

Следующие разделы содержат примеры использования программы bcp:
Форматы данных для массового экспорта или импорта (SQL Server)
 ● Использование собственного формата для импорта или экспорта данных (SQL Server)
 ● Использование символьного формата для импорта или экспорта данных (SQL Server)
 ● Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)
 ● Использование символьного формата Юникода для импорта и экспорта данных (SQL Server)

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

Сохранение значений NULL или использование значений по умолчанию при массовом импорте данных (SQL Server)

Сохранение значений идентификаторов при массовом импорте данных (SQL Server)

Файлы форматирования для импорта или экспорта данных (SQL Server)
 ● Создание файла форматирования (SQL Server)
 ● Использование файла форматирования для массового импорта данных (SQL Server)
 ● Использование файла форматирования для пропуска столбца таблицы (SQL Server)
 ● Использование файла форматирования для пропуска поля данных (SQL Server)
 ● Использование файла форматирования для сопоставления столбцов таблицы с полями файла данных (SQL Server)

Примеры массового импорта и экспорта XML-документов (SQL Server)

Рекомендации и ограничения

  • Служебная программа bcp имеет ограничение на отображение в сообщении об ошибке только 512 байт символов. Отображаются только первые 512 байт сообщения об ошибке.

Дальнейшие действия

Получение справки

Примите участие в разработке документации по SQL

Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.

Дополнительные сведения см. в разделе Участие в работе над документацией по SQL Server.