Поделиться через


bcp утилита

Применимо:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsАналитическая платформа системы (PDW)База данных SQL в Microsoft Fabric

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

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

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

Примечание.

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

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

Сведения о bcp в Linux и macOS см. в соображения по bcp в Linux и macOS.

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

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

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

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

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

Примечание.

Microsoft Entra ID ранее был известен как Azure Active Directory (Azure AD).

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

  • 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 или более поздней версии.

Синтаксис

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 Microsoft Entra 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]
    [-u]
    [-v]
    [-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160)]
    [-w]
    [-x]
    [-Y[s|m|o]]

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

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

Рекомендации по bcp в Linux и macOS

  • Терминатор поля — это вкладка (\t).

  • Конец строки является новой строкой (\n).

  • Режим символов — это предпочтительный формат для файлов форматирования bcp и файлов данных, не содержащих расширенные символы.

  • Обратная косая черта (\) в аргументе командной строки должна быть взята в кавычки или экранирована. Например, чтобы указать новую строку в качестве настраиваемого конца строки, необходимо использовать один из следующих механизмов:

    • -r\\n
    • -r"\n"
    • -r'\n'

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

В следующей таблице перечислены параметры командной строки, доступные в bcp, и какие операционные системы они поддерживают.

Параметр командной строки Поддерживается в Windows Поддерживается в Linux и macOS
[database_name.]схема. {table_name | view_name | "запрос"} Да Да
[{вdata_file | outdata_file | queryoutdata_file | формате 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 Да Да
Microsoft Entra аутентификация Да Да
-h"подсказки [,...n]" Да Нет
-i input_file Да Нет
-k Да Да
-K намерение_приложения Да Да
-l login_timeout Да Да
-L последняя_строка Да Да
-m max_errors Да Да
-n Да Да
-N Да Нет
-o output_file Да Нет
-P пароль Да Да
-q Да Да
-r row_term Да Да
-R Да Да
-S [server_name[\instance_name]] Да Да
-t field_term Да Да
-T Да Да
-U login_id Да Да
-u Нет Да
-v Да Да
-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 ) Да Нет
-w Да Да
-x Да Нет
-Y[s|m|o] Нет Да

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, возвращающий результирующий набор. Если запрос возвращает несколько результирующих наборов, то в файл данных будет скопирован только первый результирующий набор. Последующие результирующие наборы не учитываются. Используйте двойные кавычки для запроса и одинарные кавычки для элементов, встроенных в запрос. queryout также необходимо указать при массовом копировании данных из запроса.

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

в

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

out

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

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

файл_данных

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

запрос

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

формат

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

-a packet_size

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

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

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

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

Не используйте этот параметр с параметром -h "ROWS_PER_BATCH=<bb>" .

-c

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

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

-C { ACP | OEM | RAW | code_page }

применяется только к: Windows. Не поддерживается в Linux и macOS.

Указывает кодовую страницу данных в файле данных. Аргумент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.

-d database_name

Указывает базу данных, с которой надо соединиться. По умолчанию 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).

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

    Примечание.

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

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

-F первый_ряд

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

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

-G

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

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

Внимание

В Linux и macOS интерактивная проверка подлинности Microsoft Entra в настоящее время не поддерживается. Для интегрированной проверки подлинности 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 -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 -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
    

    В следующем примере импортируются данные с помощью встроенной проверки подлинности 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
    
  • Управляемая служебная идентификация Microsoft Entra

    Внимание

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

    Для экспорта данных через bcp с помощью управляемого удостоверения службы в Windows требуется настроить DSN.

    Чтобы настроить DSN на компьютере под управлением Windows, выполните действия.

    1. Нажмите клавишу Windows на клавиатуре

    2. Введите ODBC и выберите соответствующую версию администратора источника данных ODBC

    3. Выберите вкладку "User DSN" или "System DSN"

    4. Нажмите кнопку "Добавить " и следуйте инструкциям

    5. При выборе типа проверки подлинности выберите проверку подлинности удостоверением управляемой службы Azure

    6. Если у вас есть назначаемое пользователем управляемое удостоверение, вставьте Object (principal) ID из этого удостоверения в поле Login ID внизу вкладки проверки подлинности.

    7. Чтобы настроить DSN, продолжайте следовать подсказкам.

    Полное пошаговое руководство, включая снимки экрана, см. в разделе "Создание и редактирование доменных сетей" в пользовательском интерфейсе.

    После настройки DSN можно вызвать bcp с флагом -D, чтобы указать, что значение, переданное для -S, является DSN.

    bcp bcptest out "c:\last\data1.dat" -c -D -S myDSN -d testdb
    

  • Токен доступа Microsoft Entra ID

    применяется только к: Linux и macOS. Windows не поддерживается.

    Пользователи bcp версии 17.8 и более поздних на Linux и macOS также могут проходить проверку подлинности с помощью токена. В следующих примерах используется PowerShell в Linux для получения маркера доступа.

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

    Connect-AzAccount -Identity
    $access_token | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
    bcp bcptest out data2.dat -S aadserver.database.windows.net -d testdb -G -P /tmp/tokenFile -c
    

    В этом примере Client ID передается параметру -AccountId в Connect-AzAccount, чтобы получить токен доступа и поместить его в файл токена. Затем маркер используется для экспорта данных с помощью указанного пользовательского управляемого удостоверения.

    Connect-AzAccount -Identity -AccountId 'client_id_of_user_assigned_managed_identity'
    $access_token | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
    bcp bcptest out data2.dat -S aadserver.database.windows.net -d testdb -G -P /tmp/tokenFile -c
    
  • Интерактивная Microsoft Entra

    применяется только к: Windows. Linux и macOS не поддерживаются.

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

    Для интерактивной проверки подлинности 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 -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 -S aadserver.database.windows.net -d testdb -G -U joe@contoso.com
    

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

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

применяется только к: Windows. Не поддерживается в Linux и macOS.

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

  • 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. Подробную информацию см. в разделе sp_tableoption.

    Примечание.

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

  • ПРОВЕРКА_ОГРАНИЧЕНИЙ

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

    Примечание.

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

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

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

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

    Примечание.

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

  • FIRE_TRIGGERS

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

-i input_file

Применимо только к: Windows. Не поддерживается в Linux и macOS.

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

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

-k

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

-K application_intent

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

-l login_timeout

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

-L последняя_строка

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

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

-m max_errors

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

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

Примечание.

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

-n

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

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

-N

применяется только к: Windows. Не поддерживается в Linux и macOS.

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

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

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

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

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

применяется только к: Windows. Не поддерживается в Linux и macOS.

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

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

-P password

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

Внимание

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

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

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

-q

Выполняет инструкцию SET QUOTED_IDENTIFIER 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 для подключения или, если используется -D, DSN.

Если сервер не указан, программа 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 login_id

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

-u

применяется только к Linux и macOS для bcp версии 18 и более поздних. Не поддерживается в Windows.

Сертификат сервера доверия.

-v

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

-V { 80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 }

применяется только к: Windows. Не поддерживается в Linux и macOS.

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

Применяется только к Windows. Не поддерживается в Linux и macOS.

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

-Y[s|m|o]

применяется исключительно к Linux и macOS для bcp версии 18 и более поздних версий. Не поддерживается в Windows.

Указывает режим шифрования подключения. Параметры : "Строгий", "Обязательный" и "Необязательный". Использование -Y без параметров использует режим обязательного шифрования и эквивалентно -Ym.

Замечания

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

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

Значения в импортируемом файле данных для вычисляемых или timestamp столбцов игнорируются, а 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 разрешение требуется, если одно из следующих условий является истинным:

  • Существуют ограничения, а подсказка 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).

  • (Администратор или пользователь) По возможности используйте собственный формат (-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) и более поздних версий, Azure SQL Database и Azure SQL Managed Instance. WideWorldImporters можно скачать отсюда: https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0. См. инструкции RESTORE для получения синтаксиса восстановления образца базы данных.

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

За исключением случаев, указанных иначе, в примерах предполагается, что вы используете проверку подлинности Windows и имеете надежное подключение к экземпляру сервера, на котором выполняется команда bcp. Имя каталога D:\bcp используется во многих примерах.

Следующий скрипт Transact-SQL создает пустую копию таблицы WideWorldImporters.Warehouse.StockItemTransactions, а затем добавляет ограничение первичного ключа:

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.

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

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

Получить помощь

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

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

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