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

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

Загрузка данных с помощью параметра -f (format)

В нашем первом примере раздела "Использование BCP" мы создали форматный файл с именем data.fmt. Вместо ввода вручную всех параметров форматирования, таких как storage type (тип хранения), prefix length (длина префикса), field length (длина поля) и field terminator (разделитель полей), вы можете использовать форматный файл. Для вызова этого файла используется параметр -f (format), как это показано ниже:

bcp Northwind.dbo.Customers in data2.file -e err.fil -f data.fmt
-L 5 -Usa

В предположении, что вы ввели пароль sa и создали data2.file, сеанс будет иметь следующую форму:

Starting copy...

5 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.): total       50 Avg       10 (100.00 rows
per sec.)

В дополнение к параметру -f в данном примере включен параметр -L. Этот параметр указывает последнюю строку для копирования из входного файла. В данном примере последней обрабатываемой строкой была пятая строка. В результате здесь не появится сообщение об ошибке EOF (конец файла), которое мы видели в предыдущем примере.

Извлечение данных путем интерактивного использования BCP

Использование BCP в интерактивном режиме для копирования данных из базы данных проще, чем использование BCP для копирования в базу данных, поскольку при извлечении данных BCP самостоятельно заполняет для вас параметры длины полей. Мы используем следующую команду для интерактивного копирования данных из таблицы Customers базы данных Northwind:

bcp Northwind.dbo.Customers out dataout.dat -e err.fil -U sa

После ввода этой команды и пароля sa начнется выполнение сеанса. (Ввод пользователя показан полужирным шрифтом.)

Enter the file storage type of field CustomerID [nchar]: char 
Enter prefix-length of field CustomerID [1]: 0
Enter length of field CustomerID [26]: 
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]: 
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]: 
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]: 
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]: 
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]: 
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]: 
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]: 
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]: 
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]: 
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]: 
Enter field terminator [none]: , 
 
Do you want to save this format information in a file? [Y/n]: n
Host filename [bcp.fmt]: 

Starting copy... 
 
96 rows copied. 
Network packet size (bytes): 4096 
Clock Time (ms.): total    10 Avg     0 (9600.00 rows per sec.)

В этом интерактивном сеансе BCP создается файл с разделителями – символами табуляции (напомним, что символ табуляции является разделителем по умолчанию); этот файл можно просматривать с помощью Notepad. Это текстовый файл, и все его данные являются данными символьного типа. К сожалению, BCP не добавляет символ новой строки в конце каждой строки. Тем самым при просмотре файл с помощью Notepad вы увидите одну очень длинную строку данных.

Извлечение данных с помощью BCP с параметрами командной строки

Чтобы создать более удобный для чтения файл данных, в котором данные разделены символом табуляции, а каждая строка заканчивается символом новой строки, используйте параметр -c, как это показано ниже:

bcp Northwind.dbo.Customers out dataout.dat -e err.fil -c -U sa

После ввода этой команды и пароля sa начнется выполнение сеанса, как показано ниже:

Starting copy...
 
96 rows copied. 
Network packet size (bytes): 4096 
Clock Time (ms.): total      1 Avg      0 (96000.00 rows per sec.)
Извлечение данных с использованием параметра queryout

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

bcp "SELECT CustomerID, CompanyName FROM Northwind..Customers" 
queryout dataout.dat -e err.fil -c -U sa

Как обычно, введите пароль sa; сеанс будет показан в следующей форме:

Starting copy...
 
96 rows copied. 
Network packet size (bytes): 4096 
Clock Time (ms.): total      1 Avg      0 (96000.00 rows per sec.)

Результатом этого запроса будет файл данных с разделителями в виде символов табуляции и признаками конца строк; этот файл состоит из двух колонок: CustomerID и CompanyName. Это способ полезно использовать, если вы хотите извлечь только определенные колонки или строки базы данных.

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Игорь Соловьев
Игорь Соловьев
Россия, Братск