Опубликован: 11.12.2006 | Уровень: специалист | Доступ: платный
Лекция 24:

Загрузка базы данных

Использование BCP

В этом разделе мы рассмотрим несколько примеров использования BCP для загрузки данных в SQL Server и из SQL Server. Эти примеры не охватывают все возможности, но они дадут вам хорошее представление о разнообразных режимах и методах работы с помощью BCP.

Вы можете использовать BCP из командной строки, как это описано выше, или в интерактивном стиле. Для вызова BCP без какого-либо дополнительного взаимодействия с этой программой, вы должны задать параметр -n, -c, -w или -N. Если не указан ни один из этих параметров, то программа BCP будет работать в интерактивном режиме.

Примечание.Во всех следующих примерах используется таблица Customers из базы данных Northwind.
Загрузка данных путем интерактивного использования BCP

Использование BCP для загрузки данных в интерактивном режиме может вызывать определенные трудности, поскольку этот метод требует, чтобы вы указывали ширину и типы колонок. Вы не обязаны это делать, если используете параметры командной строки, как это описано в следующем разделе. Хотя использование BCP в интерактивном режиме не рекомендуется, мы рассмотрим пример использования этого метода, чтобы вы имели полное представление о том, как работает BCP. В этом примере мы выполним копирование данных из файла data2.file в таблицу Customers базы данных Northwind с записью ошибок в файл err.file. Вы должны иметь заранее созданный файл данных data2.file. Этот файл содержит данные, которые вам нужно загрузить в таблицу Customers. Для запуска интерактивного сеанса в качестве системного администратора введите следующий оператор:

bcp Northwind.dbo.Customers in data2.file -e err.file -Usa

Затем у вас будет запрошен пароль. Введите пароль системного администратора (sa).

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

Enter the file storage type of field CustomerID [nchar]: char
(Введите тип файлового хранения для поля ...)
Enter prefix-length of field CustomerID [1]: 0
(Введите длину префикса поля ...)
Enter length of field CustomerID [26]: 5
(Введите длину поля ...)
Enter field terminator [none]: ,
(Введите ограничитель поля ...)

Enter the file storage type of field CompanyName [nvarchar]: char
Enter prefix-length of field CompanyName [1]: 0
Enter length of field CompanyName [189]: 40
Enter field terminator [none]: ,
Enter the file storage type of field ContactName [nvarchar]: char
Enter prefix-length of field ContactName [1]: 0
Enter length of field ContactName [143]: 30
Enter field terminator [none]: ,


Enter the file storage type of field ContactTitle [nvarchar]: char
Enter prefix-length of field ContactTitle [1]: 0
Enter length of field ContactTitle [143]: 30
Enter field terminator [none]: , 

Enter the file storage type of field Address [nvarchar]: char 
Enter prefix-length of field Address [1]: 0
Enter length of field Address [283]: 60
Enter field terminator [none]: , 
 
Enter the file storage type of field City [nvarchar]: char 
Enter prefix-length of field City [1]: 0
Enter length of field City [73]: 15
Enter field terminator [none]: , 

Enter the file storage type of field Region [nvarchar]: char 
Enter prefix-length of field Region [1]: 0
Enter length of field Region [73]: 15
Enter field terminator [none]: , 
 
Enter the file storage type of field PostalCode [nvarchar]: char 
Enter prefix-length of field PostalCode [1]: 0
Enter length of field PostalCode [49]: 10
Enter field terminator [none]: , 
 
Enter the file storage type of field Country [nvarchar]: char 
Enter prefix-length of field Country [1]: 0
Enter length of field Country [73]: 15
Enter field terminator [none]: ,

Enter the file storage type of field Phone [nvarchar]: char 
Enter prefix-length of field Phone [1]: 0
Enter length of field Phone [115]: 24
Enter field terminator [none]: ,
 
Enter the file storage type of field Fax [nvarchar]: char 
Enter prefix-length of field Fax [1]: 0
Enter length of field Fax [115]: 24
Enter field terminator [none]: ,
 
Do you want to save this format information in a file? [Y/n]: Y
(Хотите сохранить эту информацию о формате в файле?)
Host filename [bcp.fmt]: data.fmt
(Имя файла)
Starting copy...

(Начало копирования)
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver] Unexpected EOF  
encountered in BCP data-file
(Ошибка = ... непредвиденный конец файла в файле данных BCP)
 
5 rows copied.
(Скопировано 5 строк)
Network packet size (bytes): 4096
(Размер сетевого пакета [в байтах])
Clock Time (ms.): total       51 Avg       10 (98.04 rows
per sec.)
(Время (мс): всего 51 В среднем 10 (98.04 строк в сек.)

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

Загрузка данных программой BCP с помощью параметров командной строки

Как уже говорилось, вам будет намного проще использовать BCP для загрузки данных, если вы будет использовать параметры командной строки. В примере этого раздела мы будем использовать BCP для загрузки данных из файла данных, состоящего из символьных колонок, разделенных символами табуляции (tab). Чтобы указать, что в файле данных используется символьный формат, мы будем использовать параметр -c. Кроме того, использование параметра -c позволяет выполнять BCP в неинтерактивном режиме. Следующая команда копирует 25 строк данных из файла данных data.file. в таблицу Customers базы данных Northwind:

bcp Northwind.dbo.Customers in data.file -e err.fil -c -Usa

Поскольку параметр -c указывает символьные данные, вам не нужно задавать длину полей и длину префиксов. Если предположить, что вы создали файл data.file с 25 строками данных, разделенных символом tab в соответствии с колонками таблицы Customers, и ввели пароль sa, то соответствующий сеанс будет иметь следующую форму: (Размер вашего сетевого пакета и время работы, возможно, будут отличаться.)

Starting copy...

25 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.): total       80 Avg        3 (312.50 rows per sec.)

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

Максим Ерохин
Максим Ерохин
Россия, г. Санкт-Петербург
Татьяна Лубинец
Татьяна Лубинец
Россия, Уфа, Уфимский авиационный институт, 1987