bcp, программа

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

Программа blk copy program (bcp) массово копирует данные между экземпляром Microsoft SQL Server и файлом данных в указанном пользователем формате.

Примечание.

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

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

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

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

Примечание.

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

Примечание.

Идентификатор Microsoft Entra — это новое имя Azure Active Directory (Azure AD). В настоящее время мы обновляем документацию.

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

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

Windows

Linux и macOS

Инструкции по установке sqlcmd и bcp в Linux см. в статье "Установка средств командной строки SQL Server" и "BCP" в Linux и macOS.

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

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

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

Новая служба bcp поддерживает проверку подлинности Microsoft Entra, включая поддержку многофакторной проверки подлинности (MFA) для База данных SQL Azure и Azure Synapse Analytics.

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

  • Windows 8, Windows 8.1, Windows 10, Windows 11

  • Windows Server 2016, Windows Server 2019, Windows Server 2022

Для этого компонента требуется последний драйвер Microsoft ODBC 17 для SQL Server.

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

Примечание.

sqlcmd и bcp также доступны в Linux. Дополнительные сведения см. в статье "Установка средств командной строки SQL Server sqlcmd и bcp в Linux".

Синтаксис

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 | 140 | 150 | 160 ) ]
    [-w]
    [-x]

Параметры командной строки

database_name

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

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

schema

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

table_name

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

view_name

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

"query"

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

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

in

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

out

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

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

data_file

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

запрос

Копируется из запроса и должен быть указан только при массовом копировании данных из запроса.

format

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

-a размер_пакета

Указывает число байтов в каждом сетевом пакете, отправляемом от сервера и к серверу. Параметр конфигурации сервера можно задать с помощью SQL Server Management Studio (или системной sp_configure хранимой процедуры). Однако параметр конфигурации сервера в отдельных случаях можно изменить с помощью этого параметра. packet_size может быть от 4096 байт до 65 535 байт; значение 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 имеет смысл только в том случае, если данные содержат столбцы типа char, varcharили text с символами, коды которых больше 127 или меньше 32.

Примечание.

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

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

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

-d имя_базы_данных

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

-D

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

-e err_file

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

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

E-

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

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

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

-f format_file

Указывает полный путь к файлу форматирования. Значение этого параметра зависит от среды, в которой она используется, как показано ниже.

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

  • Если используется с параметром или out параметромin, -f требуется существующий файл формата.

    Примечание.

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

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

-F first_row

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

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

-G

Применимо только к: База данных SQL Azure и Azure Synapse Analytics.

Этот параметр используется клиентом при подключении к База данных SQL Azure или Azure Synapse Analytics, чтобы указать, что пользователь прошел проверку подлинности с помощью идентификатора Microsoft Entra. Для коммутатора -G требуется версия 14.0.3008.27 или более поздней версии. Чтобы определить версию, выполните bcp -v. Дополнительные сведения см. в статье Об использовании проверки подлинности Microsoft Entra с База данных SQL или Azure Synapse Analytics.

Важно!

Интерактивная проверка подлинности Microsoft Entra в настоящее время не поддерживается в Linux или macOS. Для интегрированной проверки подлинности Microsoft Entra требуется Microsoft ODBC Driver 17 для SQL Server версии 17.6.1 и более поздних версий, а также правильно настроенная среда Kerberos.

Совет

Чтобы проверка, если ваша версия bcp включает поддержку проверки подлинности Microsoft Entra, введите bcp --help и убедитесь, что отображается -G в списке доступных аргументов.

  • Имя пользователя и пароль Microsoft Entra

    Если вы хотите использовать имя пользователя и пароль Microsoft Entra, вы можете указать -G этот параметр, а также использовать имя пользователя и пароль, указав -U-P и параметры.

    В следующем примере данные экспортируются с помощью имени пользователя и пароля Microsoft Entra. Здесь показана процедура экспорта таблицы 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
    

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

    bcp bcptest in "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    
  • Интегрированная microsoft Entra

    Для встроенной проверки подлинности Microsoft Entra укажите -G параметр без имени пользователя или пароля. Для этой конфигурации требуется, чтобы текущая учетная запись пользователя Windows (учетная запись , в которой выполняется команда bcp ), федеративна с идентификатором Microsoft Entra:

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

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

    В следующем примере импортируются данные с помощью встроенной проверки подлинности Microsoft Entra. Пример импортирует данные из таблицы c:\last\data2.dat файлов в таблицу bcptest в базу данных testdb на логическом сервере aadserver.database.windows.netс помощью учетных данных Windows, федеративных с идентификатором Microsoft Entra:

    bcp bcptest in "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c -t
    
  • Интерактивный microsoft Entra

    Интерактивная проверка подлинности Microsoft Entra, доступная для всех SQL Azure и SQL Server 2022+, позволяет использовать интерактивное диалоговое окно для проверки подлинности, которое также поддерживает многофакторную проверку подлинности.

    Для интерактивной проверки подлинности Microsoft Entra требуется bcp версии 15.0.1000.34 или более поздней версии, а также ODBC версии 17.2 или более поздней.

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

    В следующем примере данные экспортируются с помощью интерактивной проверки подлинности Microsoft Entra, которая включает указание имени пользователя учетной записи Microsoft Entra.

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

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

    Если используется пользователь Microsoft Entra, который является учетной записью 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
    

    Если гостевые пользователи существуют в определенном клиенте Microsoft Entra и являются частью группы, которая существует в База данных SQL с разрешениями базы данных для выполнения команды bcp, используется псевдоним гостевого пользователя (например, keith0@adventure-works.com).

-h "подсказки [, ... n]"

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

  • ORDER (столбец [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 теперь применяет проверку данных и проверка данных, которые могут привести к сбою сценариев, если они выполняются на недопустимых данных в файле данных.

    Примечание.

    Параметр -mmax_errors не применяется к ограничению проверка.

  • FIRE_TRIGGERS

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

-i входной_файл

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

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

-k

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

-K намерение_приложения

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

-l время_ожидания_входа

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

-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 -N может появиться предупреждение усечения, если имеется фиксированный символьный столбец, отличный от Юникода (например, char(10)).

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

-o выходной_файл

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

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

-P пароль

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

Важно!

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

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

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

-q

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

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

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

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

-r row_term

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

Если указать терминатор строки в шестнадцатеричной нотации в команде bcp , значение усечено по 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.

-t field_term

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

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

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

-T

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

Важно!

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

-U имя_для_входа

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

-v

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

-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160)

Выполняет операцию массового копирования с помощью типов данных из более ранней версии 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)

140 = SQL Server 2017 (14.x)

150 = SQL Server 2019 (15.x)

160 = SQL Server 2022 (16.x)

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

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

w-

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

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

-x

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

Замечания

  • Клиент bcp 13.0 устанавливается при установке средств Microsoft SQL Server 2019 (15.x). Если средства устанавливаются для нескольких версий SQL Server в зависимости от порядка значений переменной среды PATH, возможно, вы используете более ранний клиент bcp вместо клиента bcp 13.0. Переменная среды определяет набор каталогов, используемых Windows для поиска исполняемых файлов. Чтобы узнать, какая версия используется, выполните bcp -v команду в командной строке Windows. Чтобы получить информацию о том, как задать путь к команде в переменной среды 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 (ядро СУБД).

  • Сведения о подготовке данных для операций массового импорта или экспорта см. в статье "Подготовка данных для массового экспорта или импорта".

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

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

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

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

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

Вычисляемые столбцы и столбцы метки времени

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

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

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

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

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

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

    bcp AdventureWorks2022.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 требуется, если одно из следующих условий имеет значение true:

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

    Примечание.

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

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

    Примечание.

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

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

Примечание.

Требование разрешения ALTER TABLE для целевой таблицы было новым в SQL Server 2005 (9.x). Это новое требование может привести к сбою сценариев bcp, которые не применяют триггеры и ограничения проверка, если учетная запись пользователя не имеет разрешений alter table для целевой таблицы.

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

В этом разделе содержатся рекомендации по режиму символов (-c) и собственному режиму (-n).

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

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

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

Примеры

Примеры, приведенные в этом разделе, используют WideWorldImporters пример базы данных для SQL Server 2016 (13.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр 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;

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

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

bcp -v

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

В следующих примерах показан 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.

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

В следующем примере показан 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>

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

В следующих примерах показан 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

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

Чтобы скопировать определенную 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

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

Чтобы скопировать результирующий набор из инструкции 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

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

Следующий пример создает три разных файла форматирования для таблицы 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 Format Files (SQL Server).

I. Использование файла форматирования для массового импорта с помощью 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).

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

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

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

K. Пример выходного файла с помощью настраиваемых полей и терминаторов строк

В этом примере показаны два примера файлов, созданных bcp с помощью настраиваемых полей и терминаторов строк.

  1. Создайте таблицу dbo.T1 в tempdb базе данных с двумя столбцами ID и Name.

    USE tempdb;
    GO
    
    CREATE TABLE dbo.T1 (ID INT, [Name] NVARCHAR(20));
    GO
    
    INSERT INTO dbo.T1 VALUES (1, N'Natalia');
    INSERT INTO dbo.T1 VALUES (2, N'Mark');
    INSERT INTO dbo.T1 VALUES (3, N'Randolph');
    GO
    
  2. Создайте выходной файл из таблицы примера dbo.T1с помощью пользовательского конца поля.

    В этом примере имя сервера — MYSERVERэто имя, а конечный оператор настраиваемого поля указывается.-t ,

    bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t ,
    

    Результирующий набор:

    1,Natalia
    2,Mark
    3,Randolph
    
  3. Создайте выходной файл из таблицы примера dbo.T1с помощью пользовательского конца поля и пользовательского конца строки.

    В этом примере имя сервера — MYSERVERимя сервера, конечный элемент настраиваемого поля задается, -t ,а пользовательский терминатор строк указывается в параметре -r :.

    bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t , -r :
    

    Результирующий набор:

    1,Natalia:2,Mark:3,Randolph:
    

    Примечание.

    Терминатор строки всегда добавляется даже к последней записи. Однако терминатор поля не добавляется в последнее поле.

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

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

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

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

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

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

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

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