Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5872 / 429 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00
Лекция 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. Это способ полезно использовать, если вы хотите извлечь только определенные колонки или строки базы данных.