Программирование >>  Программирование баз данных 

1 ... 216 217 218 [ 219 ] 220 221 222 ... 346


Файлы с меньшим количеством столбцов по сравнению с таблицей

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

Например, если предусмотрен ввод с помощью файла данных только значений столбцов Department ID, Name и GroupName, то необходимо внести в файл формата следующие изменения:

9.0 4

1 SQLSMALLINT О 2 1 DepartmentID

2 SQLNCHAR 2 100 2 Name SQL Latinl General CPl CI AS

3 SQLNCHAR 2 100 3 GroupName SQL Latinl General CPl CI AS

4 SQLDATETIME 0 0 , 0 ModifiedDate

Итак, очевидно, что поле, соответствующее столбцу ModifiedDate, и сам столбец обозначены нлями. Кроме того, поскольку значения ModifiedDate не заданы, а для столбца таблицы предусмотрено применяемое по умолчанию значение (Getdate ()), то во всех вставленных строках появится значение текущей даты.

Аналогичные модификации осуществляются и в версии на языке XML: <?xml version= l.О ?>

<BCPFORMAT xmlns= http: schemas.microsoft.com/sqlserver/2004/bulkload/format xmlns:xsi= http: www.w3.org/2 0 01/XMLSchema-instance > <REC0RD>

<FIELD ID= 1 xsi:type= NativeFixed LENGTH= 2 />

<FIELD ID= 2 xsi:type= NCharPrefix PREFIX LENGTH= 2 MAX LENGTH= 10 0 COLLATION= SQL Latinl General CPl CI AS />

<FIELD ID= 3 xsi:type= NCharPrefix PREFIX LENGTH= 2 MAX LENGTH= 100 COLLATION= SQL Latinl General CPl CI AS /> </RECORD> <ROW>

<COLUMN S0URCE= 1 NAME= DepartmentID xsi:type= SQLSMALLINT /> <COLUMN S0URCE= 2 NAME= Name xsi:type= SQLNVARCHAR /> <COLIJMN S0URCE= 3 NAME = GroupName xsi : type = SQLNVARCHAR /> </ROW>

</BCPFORMAT>

В файле данных отсутствует столбец, который мог быть определен, поэтому его определения нет и в файле формата. Для столбца ModifiedDate не нужно задавать какую-либо информацию, поэтому он также пропущен (в расчете на то, что в этот столбец будут введены значения, предусмотренные по умолчанию).

Файлы с большим количеством столбцов по сравнению с таблицей

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



9.0 4

1 SQLSMALLINT

, 1

DepartmentID

IIII

2 SQLNCHAR

, 2

Name

SQL Latinl General

3 SQLNCHAR

, 3

GroupName

SQL Lat inl General

4 SQLDATETIME

, 4

ModifiedDate

IIII

5 SQLDATETIME

, 0

ModifiedDate

II It

Ha этот раз рассматривается пример, в котором исходный файл содержит сведения о дате создания отдела. Но целевая таблица не включает столбец, в который можно было бы ввести эту информацию. В исходный файл формата вносятся все поля, а также два фиктивных столбца с номерами столбцов, равными 0. Это вынуждает утилиту ВСР игнорировать соответствующие поля.

В данной ситуации версия на языке XML должна отражать тот факт, что в файле данных имеется столбец, подлежащий рассмотрению. Тем не менее столбцы таблицы назначения можно по-прежнему игнорировать: <?xml version= l.0 ?>

<BCPFORMAT xmlns= http: schemas.microsoft.com/sqlserver/2004/bulkload/format xmlns:xsi= http: www.w3.org/2001/XMLSchema-instance > <RECORD>

<FIELD ID= 1 xsi:type= NativeFixed LENGTH= 2 />

<FIELD ID= 2 xsi:type= NCharPrefix PREFIX LENGTH= 2 MAX LENGTH= 100 COLLATION= SQL Latinl General CPl CI AS />

<FIELD ID= 3 xsi:type= NCharPrefix PREFIX LENGTH= 2 MAX LENGTH= 100 COLLATION= SQL Latinl General CPl CI AS />

<FIELD ID= 4 xsi:type= NativeFixed LENGTH= 8 />

<FIELD ID= 5 xsi:type= NativeFixed LENGTH= 8 />

</RECORD> <ROW>

<COLUMN S0URCE= 1 NAME= DepartmentID xsi:type= SQLSMALLINT /> <COLUMN S0URCE= 2 NAME= Name xsi:type= SQLNVARCHAR /> <COLUMN S0URCE= 3 NAME= GroupName xsi:type= SQLNVARCHAR /> <COLUMN S0URCE= 4 NAME= ModifiedDate xsi:type= SQLDATETIME /> </ROW>

</BCPFOiyyiAT>

Несогласованная последовательность полей

Еще одна возможность состоит в том, что исходный файл и таблица назначения имеют одинаковое количество полей, но порядок расположения этих полей не совпадает. Для установления соответствия между полями можно изменить порядок расположения столбцов в таблице назначения с учетом порядка расположения полей в строках файла данных:

9.0 4

1 SQLSMALLINT О 2 , 1 DepartmentID IIII

2 SQLNCHAR 2 100 , 3 GroupName SQL Latinl General CPl CI AS

3 SQLNCHAR 2 100 , 2 Name SQL Latinl General CPl CI AS

4 SQLDATETIME 0 8 , 4 ModifiedDate

В этом случае поле GroupName указано в исходном файле перед полем с названием отдела. Name. В соответствии с этим был изменен порядок нумерации столбцов таблицы назначения. Обратите внимание на то, что последовательность, в которой



перечислены столбцы таблицы назначения, не изменилась, но изменились числовые обозначения этих столбцов.

Таким образом, чтобы внести соответствуюпще модификации в версию на языке XML, достаточно откорректировать значения одного-двух полей в исходном файле XML: <?xml version= l.0 ?>

<BCPFORMA.T xmlns= http: schemas .microsoft. com/sqlserver/2004/bulkload/f ormat xmlns:xsi= http: www.w3.org/2001/XMLSchema-instance > <RECORD>

<FIELD ID= 1 xsi:type= NativeFixed LENGTH= 2 />

<FIELD ID= 2 xsi:type= NCharPrefix PREFIX LENGTH= 2 MAX LENGTH= 100 COLLATION= SQL Latinl General CPl CI AS />

<FIELD ID= 3 xsi:type= NCharPrefix PREFIX LENGTH= 2 MAX LENGTH= 100 COLLATION= SQL Latinl General CPl CI AS />

<FIELD ID= 4 xsi:type= NativeFixed LENGTH= 8 /> </RECORD> <ROW>

<COLUMN S0URCE= 1 NAME= DepartmentID xsi:type= SQLSMALLINT /> <COLUMN S0URCE= 3 NAME= Name xsi:type= SQLNVARCHAR /> <COLUMN S0URCE= 2 NAME= GroupName xsi:type= SQLNVARCHAR /> <COLUMN S0URCE= 4 NAME= ModifiedDate xsi:type= SQLDATETIME /> </ROW> </BCPFORMAT>

Использование файлов формата

в качестве примера рассмотрим, как используется файл формата для импорта. Ниже приведена команда, предназначенная для копирования строк из файла short-dept. txt в таблицу Department. В качестве файла формата, отличного от XML, используется файл ShortDept. f mt. Версия файла формата на языке XML имеет имя ShortDeptX.fmt.

ВСР AdventureWorks.HumanResources.Department in с:\shortdept.txt -fс : \ shortdept.fmt -Usa -Pbubbagump

Для разнообразия в приведенном примере команды применяется аутентификация SQL Seruer вместо аутентификации Windows. Для использования аутентификации Windows достаточно вместо параметров -U и -Р в этой команде задать часто применявшийся в этой главе параметр - Т.

Файлы ShortDept.txt, ShortDept. fmt и ShortDeptX.fmt, рассматриваемые в данном примере, можно загрузить с Web-узла Wrox или получить по адресу Prof es-sionalSQL.com.

Максимальное повышение производительности импорта

Одним из очевидных способов максимального повышения производительности утилиты ВСР является обеспечение того, чтобы целевая таблица удовлетворяла всем требованиям по передаче данных с помощью ВСР в режиме без ведения журнала. Это означает, что может потребоваться выполнить описанные ниже действия.

Удалить все существующие индексы на целевой таблице. Безусловно, это требование фактически является обязательным, только если должно быть обес-



1 ... 216 217 218 [ 219 ] 220 221 222 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика