bcp утилита
Применимо:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure 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) и более поздних версий.
скачать драйвер ODBC для SQL Server
скачать служебные программы командной строки Майкрософт 15 для SQL Server (x64)
Скачайте утилиты командной строки Microsoft 15 для SQL Server (x86)
Сведения о версии
- Номер выпуска: 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
на сервере Azureaadserver.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, выполните действия.
Нажмите клавишу Windows на клавиатуре
Введите
ODBC
и выберите соответствующую версию администратора источника данных ODBCВыберите вкладку "User DSN" или "System DSN"
Нажмите кнопку "Добавить " и следуйте инструкциям
При выборе типа проверки подлинности выберите проверку подлинности удостоверением управляемой службы Azure
Если у вас есть назначаемое пользователем управляемое удостоверение, вставьте
Object (principal) ID
из этого удостоверения в поле Login ID внизу вкладки проверки подлинности.Чтобы настроить 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 теперь применяет валидацию и проверку данных, которые могут привести к сбою выполнения сценариев, если они выполняются на недопустимых данных в файле с данными.
Примечание.
Параметр
-m
max_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
и параметром -f
format_file и создает XML-файл форматирования вместо файла форматирования по умолчанию, который не является XML.
-x
не работает при импорте или экспорте данных. Он создает ошибку, если используется без обоих format
и -f
format_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 с помощью настраиваемых полей и терминаторов строк.
Создайте таблицу
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
Создайте выходной файл из таблицы примера
dbo.T1
, используя пользовательский разделитель полей.В этом примере имя сервера —
MYSERVER
, а-t ,
указывает разделитель пользовательского поля.bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t ,
Вот результаты.
1,Natalia 2,Mark 3,Randolph
Создайте файл вывода на основе таблицы
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 Server)
- Использование собственного формата для импорта или экспорта данных (SQL Server)
- Использование формата символов для импорта или экспорта данных (SQL Server)
- Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)
- Использование формата символов Юникода для импорта или экспорта данных (SQL Server)
Сохранение значений NULL или значений по умолчанию во время массового импорта (SQL Server)
Сохранение значений идентификаторов при массовом импорте данных (SQL Server)
Форматирование файлов для импорта или экспорта данных (SQL Server)
- Создание файла форматирования (SQL Server)
- Использование файла форматирования для массового импорта данных (SQL Server)
- Использовать файл форматирования для пропуска столбца таблицы (SQL Server)
- Использование файла форматирования для пропуска поля данных (SQL Server)
- Использование файла форматирования для сопоставления столбцов таблиц с полями файлов данных (SQL Server)
Примеры массового импорта и экспорта XML-документов (SQL Server)
Связанный контент
- Подготовка данных для массового экспорта или импорта
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- SET QUOTED_IDENTIFIER (Transact-SQL)
- sp_configure (Transact-SQL)
- sp_tableoption (Transact-SQL)
- Форматирование файлов для импорта или экспорта данных (SQL Server)
Получить помощь
- Идеи об SQL. Есть рекомендации по улучшению SQL Server?
- Вопросы и ответы по продуктам Майкрософт (SQL Server)
- DBA Stack Exchange (тег sql-server): вопросы о SQL Server
- Stack Overflow (тег sql-server): ответы на вопросы о разработке SQL
- Условия лицензии и информация о Microsoft SQL Server
- Варианты поддержки для бизнес-пользователей
- Дополнительная справка и отзывы по SQL Server
Примите участие в разработке документации по SQL
Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.
Дополнительные сведения см. в разделе Участие в работе над документацией по SQL Server.