Россия, г. Санкт-Петербург |
Загрузка базы данных
Оператор BULK INSERT
Оператор T-SQL BULK INSERT аналогичен программе BCP – в том смысле, что оба средства можно использовать для массового копирования данных из файла данных в базу данных SQL Server. Но, в отличие от BCP, оператор BULK INSERT нельзя использовать для извлечения данных из баз данных SQL Server. Это ограничение уменьшает его функциональные возможности, но поскольку оператор BULK INSERT выполняется как поток внутри SQL Server, это устраняет необходимость передачи данных из одной программы в другую, что повышает производительность при загрузке данных. Таким образом, оператор BULK INSERT загружает данные более эффективно, чем программа BCP.
Синтаксис BULK INSERT
Как и BCP, оператор BULK INSERT имеет несколько обязательных параметров и много необязательных. Вызов BULK INSERT из SQL Server (с помощью ISQL, OSQL или анализатора запросов [Query Analyzer]) происходит с помощью следующего оператора. (Здесь приводятся все обязательные и необязательные параметры.)
BULK INSERT [['имя_базы_данных'.]['владелец'].] {'имя_таблицы' | 'имя_представления' FROM 'файл_данных' } [WITH ( [BATCHSIZE [ = размер_группы ]] [[,] CHECK_CONSTRAINTS ] [[,] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'кодовая_страница']] [[,] DATAFILETYPE [ = {'char'|’native’| 'widechar'|’widenative’}]] [[,] FIELDTERMINATOR [ = 'ограничитель_полей' ]] [[,] FIRSTROW [ = первая_строка ]] [[,] FIRETRIGGERS [ = триггеры ]] [[,] FORMATFILE [ = 'путь_к_форматному_файлу' ]] [[,] KEEPIDENTITY ] [[,] KEEPNULLS ] [[,] KILOBYTES_PER_BATCH [ = килобайт_на_группу ]] [[,] LASTROW [ = последняя_строка ]] [[,] MAXERRORS [ = максимум_ошибок ]] [[,] ORDER ( { колонка [ ASC | DESC ]}[ ,...n ])] [[,] ROWS_PER_BATCH [ = строк_на_группу ]] [[,] ROWTERMINATOR [ = 'разделитель_строк' ]] [[,] TABLOCK ] )]
Обязательные параметры
Местоположение файла данных указывается параметром файл_данных. Это должен быть допустимый путь доступа к файлу.
Местоположение базы данных, в которую помещаются данные, задается определением таблицы или представлением. Как видно из определения синтаксиса оператора, вы можете также указывать владельца таблицы или представления и/или имя базы данных. Если использовать эту команду массовой вставки для вставки данных в какое-либо представление, то вы можете затрагивать только одну из базовых таблиц, указываемую в предложении FROM этого представления.
Необязательные параметры
Вы можете использовать необязательные параметры и ключевые слова, которые перечислены в табл. 24.3, чтобы модифицировать поведение BULK INSERT. Как вы увидите из описания, параметры, которые можно использовать с оператором BULK INSERT, аналогичны параметрам программы BCP.
Использование BULK INSERT
Рассмотрим два примера использования оператора BULK INSERT.
В обоих примерах мы будем загружать данные из файла с символьными данными data.file (который использовали в предыдущих примерах) в таблицу Customers базы данных Northwind.
Для загрузки данных в базу данных используйте следующий оператор T-SQL:
BULK INSERT Northwind..Customers FROM 'C:\data.file' WITH ( DATAFILETYPE = 'char' ) GO
Вы можете добавлять любое количество параметров. В следующем примере используется большее количество необязательных параметров:
BULK INSERT Northwind..Customers FROM 'C:\data.file' WITH ( BATCHSIZE = 5, CHECK_CONSTRAINTS, DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', FIRSTROW = 5, LASTROW = 20, TABLOCK )
Этот оператор будет загружать из файла данных только строки 5-20. Указывается, что разделителем полей будет символ табуляции (несмотря на то, что он используется по умолчанию). В этом примере также указано, что во время процесса массовой вставки будут проверяться ограничения, а также задается блокировка таблицы на период загрузки. Транзакции, выполняющие загрузку, будут выполняться группами по пять строк.