Массовый импорт данных при помощи инструкции BULK INSERT или OPENROWSET(BULK...)

Изменения: 17 июля 2006 г.

Данный раздел содержит общие сведения об использовании инструкций Transact-SQL BULK INSERT и INSERT...SELECT * FROM OPENROWSET(BULK...) для массового импорта данных из файла данных в таблицу Microsoft SQL Server. В разделе также описываются вопросы безопасности при использовании BULK INSERT и OPENROWSET(BULK…), а также применение этих методов для массового импорта из удаленного источника данных.

ms175915.note(ru-ru,SQL.90).gifПримечание.
При использовании BULK INSERT или OPENROWSET(BULK…) важно понимать, как SQL Server 2005 выполняет олицетворение. Дополнительные сведения см. в подразделе «Вопросы безопасности» далее в этом разделе.

Инструкция BULK INSERT

Инструкция BULK INSERT загружает данные из файла данных в таблицу. Принцип работы здесь тот же, что и при выполнении команды bcp с параметром in, однако файл данных считывается процессом SQL Server. Описание синтаксиса инструкции BULK INSERT см. в разделе BULK INSERT (Transact-SQL).

Примеры

Примеры инструкции BULK INSERT:

Функция OPENROWSET(BULK…)

В SQL Server 2005 представлен поставщик группового набора строк OPENROWSET, доступ к которому производится через вызов функции OPENROWSET с указанием параметра BULK. Функция OPENROWSET(BULK…) обеспечивает доступ к удаленным данным, производя подключение к удаленному источнику данных, например файлу данных, через поставщик OLE DB.

Чтобы импортировать групповые данные, вызовите функцию OPENROWSET(BULK…) из предложения SELECT…FROM инструкции INSERT. Основной синтаксис массового импорта данных:

INSERT ... SELECT * FROM OPENROWSET(BULK...)

При использовании инструкции INSERT функция OPENROWSET(BULK...) поддерживает табличные подсказки. Кроме обычных табличных подсказок, вроде TABLOCK, предложение BULK принимает следующие специальные табличные подсказки: IGNORE_CONSTRAINTS (не учитывается только ограничения CHECK), IGNORE_TRIGGERS, KEEPDEFAULTS и KEEPIDENTITY. Дополнительные сведения см. в разделе Табличная подсказка (Transact-SQL).

Сведения о дополнительном использовании параметра BULK см. в разделе OPENROWSET (Transact-SQL).

Примеры

Примеры инструкций INSERT...SELECT * FROM OPENROWSET(BULK...) см. в следующих разделах:

Вопросы безопасности

Если пользователь использует имя входа SQL Server, то применяется профиль безопасности учетной записи процесса SQL Server.

Если пользователь SQL Server входит в систему с проверкой подлинности Windows, то ему доступны только те файлы, к которым имеет доступ учетная запись пользователя, независимо от профиля безопасности процесса SQL Server.

Предположим, пользователь вошел в экземпляр SQL Server с проверкой подлинности Windows. Чтобы иметь возможность воспользоваться BULK INSERT или OPENROWSET для импорта данных из файла данных в таблицу SQL Server, учетная запись должна иметь доступ на чтение этого файла данных. Если же пользователь имеет доступ к файлу данных, то он может импортировать данные из файла в таблицу даже в том случае, когда процесс SQL Server не имеет прав доступа к файлу. Пользователь не должен предоставлять процессу SQL Server права на доступ к файлу.

SQL Server и Microsoft Windows могут быть настроены таким образом, чтобы экземпляр SQL Server мог выполнять соединение с другим экземпляром SQL Server посредством переадресации учетных данных пользователя Windows, прошедшего проверку подлинности. Это соглашение называется олицетворением или делегированием. При использовании BULK INSERT или OPENROWSET очень важно понимание того, как SQL Server 2005 обеспечивает безопасность олицетворения пользователя. Это позволяет хранить файл данных не на том компьютере, на котором вошел пользователь или работает процесс SQL Server. Например, если пользователь на компьютере_A имеет доступ к файлу данных на компьютере_B и делегирование учетных данных было соответствующим образом настроено, этот пользователь может подключиться к экземпляру SQL Server, запущенному на компьютере_C, получить доступ к файлу данных на компьютере_B и выполнить массовый импорт данных из этого файла в таблицу на компьютере_C. Дополнительные сведения см. в разделе Обзор олицетворения.

ms175915.note(ru-ru,SQL.90).gifПримечание.
Способ, которым SQL Server 2005 управляет доступом к файлам, решает проблему безопасности, которая имелась в Microsoft SQL Server 2000 и более ранних версиях. Раньше после проверки подлинности пользователь получал доступ к внешним файлам на основе профиля безопасности процесса SQL Server. Если процесс SQL Server имел права доступа на чтение файла, то пользователь, у которого отсутствовал доступ к этому файлу, но который был членом роли bulkadmin, мог импортировать этот файл с помощью BULK INSERT и получить доступ к его содержимому.

Массовый импорт из удаленного файла данных

Чтобы использовать BULK INSERT или INSERT...SELECT * FROM OPENROWSET(BULK...) для массового импорта данных с другого компьютера, необходимо, чтобы файл данных был доступен на обоих этих компьютерах. Укажите общий файл данных в формате UNC, то есть в следующем формате: **\\Имя сервера\Общая папка\Путь\**Имя файла. Учетная запись пользователя, используемая SQL Server, должна обладать разрешениями, необходимыми для чтения этого файла на удаленном компьютере.

Например, инструкция BULK INSERT производит массовый импорт в таблицу SalesOrderDetail базы данных AdventureWorks из файла данных с именем newdata.txt. Этот файл данных находится в общей папке \dailyorders, расположенной в общем сетевом каталоге salesforce компьютера с именем computer2.

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
ms175915.note(ru-ru,SQL.90).gifПримечание.
Это ограничение не относится к программе bcp, которая считывает файл независимо от SQL Server.

См. также

Основные понятия

Массовый импорт и экспорт данных
Операции массового импорта и массового экспорта
Основные рекомендации по массовому импорту данных

Другие ресурсы

INSERT (Transact-SQL)
Обзор олицетворения
INSERT (Transact-SQL)
Выражение SELECT (Transact-SQL)
OPENROWSET (Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)
Программа bcp
BULK INSERT (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 июля 2006 г.

Изменения
  • Сведения о программе bcp перемещены в новый раздел Массовый импорт и экспорт данных с помощью программы bcp.
  • Изменено содержимое подраздела «Функция OPENROWSET(BULK…)».
  • Добавлены подразделы «Вопросы безопасности» и «Массовый импорт из удаленного файла данных».
  • В подраздел «Дополнительные примеры» добавлены ссылки на основные разделы, содержащие примеры работы с программой bcp.

5 декабря 2005 г.

Добавления
  • Добавлено обсуждение применения команды Transact-SQL для импорта данных из удаленного файла данных.