Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
База данных SQL в Microsoft Fabric
Программа массового копирования (bcp) копирует данные между экземпляром 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 |
Данные отправляются без преобразования. |
Рекомендации по режиму символов (-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 используется во многих примерах. Замените <server_name> и другие значения заполнителей значениями для вашей среды.
Следующий скрипт 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.
Basic
В этом примере создается файл данных с именем
StockItemTransactions_character.bcp, и в него копируются данные таблицы в символьном формате.В командной строке введите следующую команду:
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
В этом примере создается файл данных с именем
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 <server_name> -T
Просмотрите Error_out.log и Output_out.log.
Error_out.log должно быть пустым. Сравните размеры файлов между StockItemTransactions_character.bcp и StockItemTransactions_native.bcp.
C. Копирование строк таблицы в файл данных (с проверкой подлинности в смешанном режиме)
В следующем примере показан out параметр в WideWorldImporters.Warehouse.StockItemTransactions таблице. В этом примере создается файл данных с именем StockItemTransactions_character.bcp , и в него копируются данные таблицы в символьном формате.
В примере предполагается, что вы используете проверку подлинности в смешанном режиме, и необходимо использовать -U параметр для указания идентификатора входа. Кроме того, если вы не подключаетесь к экземпляру SQL Server по умолчанию на локальном компьютере, используйте -S параметр, чтобы указать имя системы и, при необходимости, имя экземпляра.
В командной строке введите следующую команду. Система запросит ваш пароль.
bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\bcp\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>
D. Копирование данных из файла в таблицу
В следующих примерах иллюстрируется параметр in на таблице WideWorldImporters.Warehouse.StockItemTransactions_bcp, используя файлы, созданные ранее.
Basic
В этом примере используется ранее созданный файл данных
StockItemTransactions_character.bcp.В командной строке введите следующую команду:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\bcp\StockItemTransactions_character.bcp -c -TExpanded
В этом примере используется ранее созданный файл данных
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 <server_name> -TПросмотрите
Error_in.logиOutput_in.log.
E. Копирование определенного столбца в файл данных
Чтобы скопировать определенный столбец, можно использовать опцию 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.
Note
Переключатель -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 .
Note
Параметр -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
Note
Переключатель -x поддерживается только на Windows.
Дополнительные сведения см. в разделах Файлы форматов, отличных от XML (SQL Server) и Файлы XML-форматов (SQL Server).
I. Использование файла форматирования для массового импорта с помощью bcp
Чтобы использовать ранее созданный файл форматирования при импорте данных в экземпляр SQL Server, используйте переключатель -f с параметром in. Например, следующая команда выполняет массовое копирование содержимого файла данных StockItemTransactions_character.bcpв копию таблицы Warehouse.StockItemTransactions_bcp с помощью ранее созданного файла форматирования StockItemTransactions_c.xml.
Note
Параметр -L используется для импорта только первых 100 записей.
В командной строке введите следующую команду:
bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\bcp\StockItemTransactions_character.bcp -L 100 -f D:\bcp\StockItemTransactions_c.xml -T
Note
Файлы форматирования используются в тех случаях, когда поля файла данных отличаются от столбцов таблицы, например: по количеству, порядку или типу данных. Дополнительные сведения см. в разделе "Формат файлов для импорта или экспорта данных" (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, используя пользовательский разделитель полей.В этом примере
-t ,указывает разделитель пользовательского поля. Замените<server_name>значением для вашей среды.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t ,Вот результат.
1,Natalia 2,Mark 3,RandolphСоздайте файл вывода на основе таблицы
dbo.T1, используя заданный разделитель полей и заданный разделитель строк.В этом примере
-t ,указывает пользовательский терминатор поля, а-r :указывает пользовательский разделитель строк. Замените<server_name>на значение, соответствующее вашей среде.bcp dbo.T1 out T1.txt -T -S <server_name> -d tempdb -w -t , -r :Вот результат.
1,Natalia:2,Mark:3,Randolph:Note
Терминатор строки всегда добавляется даже к последней записи. Однако терминатор поля не добавляется в последнее поле.
Дополнительные примеры
В следующих статьях приведены примеры использования bcp:
Форматы данных для массового импорта или массового экспорта (SQL Server)
- Использование собственного формата для импорта или экспорта данных (SQL Server)
- Использование формата символов для импорта или экспорта данных (SQL Server)
- Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)
- Использование формата символов Юникода для импорта или экспорта данных (SQL Server)
Сохранение значений NULL или значений по умолчанию во время массового импорта (SQL Server)
Сохранение значений идентификаторов при массовом импорте данных (SQL Server)
Форматирование файлов для импорта или экспорта данных (SQL Server)
- Создание файла форматирования с помощью bcp (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 можно изменить самостоятельно? При этом вы не только помогаете улучшить нашу документацию, но и получаете признание в качестве участника страницы.
Дополнительные сведения см. в разделе Редактирование документации Microsoft Learn.