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

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

ПримечаниеПримечание

При использовании инструкции BULK INSERT или OPENROWSET(BULK…) важно понимать, каким образом выполняется олицетворение в SQL Server и более поздних версиях. Дополнительные сведения см. в подразделе «Вопросы безопасности» далее в этом разделе.

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

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

Примеры

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

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

Доступ к поставщику больших наборов строк 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. За пределами компонента Database Engine невозможно выполнить проверку подлинности имени входа, проходящего проверку подлинности SQL Server. Поэтому, если имя входа, использующее проверку подлинности SQL Server, инициирует команду BULK INSERT, подключение к данным устанавливается с помощью контекста безопасности учетной записи процесса SQL Server (учетной записи, которая используется службой SQL Server Database Engine). Для того чтобы прочитать исходные данные, учетной записи, которая используется службой SQL Server Database Engine, необходимо предоставить доступ к этим исходным данным. Если же пользователь 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 и более поздних версиях обеспечивается безопасность при олицетворении пользователя. Это позволяет хранить файл данных не на том компьютере, на котором вошел пользователь или работает процесс SQL Server. Например, если пользователь на компьютере_A имеет доступ к файлу данных на компьютере_B и делегирование учетных данных было соответствующим образом настроено, этот пользователь может подключиться к экземпляру SQL Server, запущенному на компьютере_C, получить доступ к файлу данных на компьютере_B и выполнить массовый импорт данных из этого файла в таблицу на компьютере_C.

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

Чтобы использовать инструкции BULK INSERT или INSERT...SELECT * FROM OPENROWSET(BULK...) для массового импорта данных с другого компьютера, необходимо, чтобы файл данных был доступен на обоих компьютерах. Для указания общего файла данных используется его имя в формате UNC, которое имеет общую форму **\\Servername\Sharename\Path\**Filename. Кроме того, используемая учетная запись должна обладать разрешениями, необходимыми для чтения этого файла на удаленном диске.

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

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail
   FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
ПримечаниеПримечание

Это ограничение не распространяется на программу bcp, поскольку клиент считывает файл независимо от SQL Server.

См. также

Справочник

Инструкция INSERT (Transact-SQL)

Выражение SELECT (Transact-SQL)

OPENROWSET (Transact-SQL)

SELECT (Transact-SQL)

Предложение FROM (Transact-SQL)

Программа bcp

BULK INSERT (Transact-SQL)

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

Массовый импорт и экспорт данных (SQL Server)