Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2016 (13.x) и более поздних версий
OPENROWSET
является альтернативой доступу к таблицам на связанном сервере и является одноразовым, нерегламентированным методом подключения и доступа к удаленным данным. Команда OPENROWSET
T-SQL включает все сведения о подключении, необходимые для доступа к удаленным данным из внешнего источника данных.
На OPENROWSET
функцию можно ссылаться в FROM
предложении запроса, как если бы это было имя таблицы. Функцию OPENROWSET
можно также ссылаться в качестве целевой INSERT
UPDATE
таблицы инструкции или DELETE
инструкции, в зависимости от возможностей поставщика данных. Несмотря на то, что запрос может возвратить несколько результирующих наборов, функция OPENROWSET
возвращает только первый из них.
Подсказка
Для более частых ссылок на внешние источники данных используйте связанные серверы. Дополнительные сведения см. в статье Связанные серверы (ядро СУБД).
OPENROWSET
BULK
без оператора доступен только в SQL Server. Подробные сведения и ссылки на аналогичные примеры на других платформах:
-
OPENROWSET
поддерживает массовые операции через встроенныйBULK
поставщик на многих платформах ядра СУБД, включая Azure и Microsoft Fabric. Дополнительные сведения см. в статье OPENROWSET BULK (Transact-SQL). - Примеры Управляемый экземпляр SQL Azure см. в статье "Запрос источников данных" с помощью OPENROWSET.
- База данных SQL Azure поддерживает только OPENROWSET BULK (Transact-SQL).
- Сведения и примеры с бессерверными пулами SQL в Azure Synapse см. в статье "Использование OPENROWSET с использованием бессерверного пула SQL в Azure Synapse Analytics". Выделенные пулы SQL в Azure Synapse не поддерживают функцию
OPENROWSET
.
Соглашения о синтаксисе Transact-SQL
Синтаксис
OPENROWSET
синтаксис используется для запроса внешних источников данных:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Аргументы
"provider_name"
Символьная строка, представляющая понятное имя (или PROGID
) поставщика данных, указанное в реестре. Аргумент provider_name не имеет значения по умолчанию. Примеры имен поставщиков: MSOLEDBSQL
, Microsoft.Jet.OLEDB.4.0
или MSDASQL
.
"источник данных"
Строковая константа, соответствующая конкретному источнику данных.
источник данных — это DBPROP_INIT_DATASOURCE
свойство, передаваемое IDBProperties
в интерфейс поставщика для инициализации поставщика. Как правило, эта строка содержит имя файла базы данных, имя сервера базы данных или имя, которое поставщик понимает для поиска базы данных или баз данных.
Источником данных может быть путь к файлу C:\SAMPLES\Northwind.mdb'
для поставщика Microsoft.Jet.OLEDB.4.0
или строка подключения Server=Seattle1;Trusted_Connection=yes;
для поставщика MSOLEDBSQL
.
"user_id"
Строковая константа, которая является именем пользователя, переданного указанному поставщику данных.
user_id указывает контекст безопасности подключения и передается в качестве DBPROP_AUTH_USERID
свойства для инициализации поставщика.
user_id не может быть именем входа в Microsoft Windows.
Пароль
Строковая константа, которая является паролем пользователя, передаваемой поставщику данных.
пароль передается в качестве DBPROP_AUTH_PASSWORD
свойства при инициализации поставщика.
пароль не может быть паролем Microsoft Windows. Например:
SELECT a.* FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\SAMPLES\Northwind.mdb';
'<user name>';
'<password>',
Customers
) AS a;
"provider_string"
Определенный поставщик строка подключения, передаваемый в качестве DBPROP_INIT_PROVIDERSTRING
свойства для инициализации поставщика OLE DB. Аргумент provider_string обычно инкапсулирует все необходимые сведения о подключении для инициализации поставщика.
Список ключевых слов, распознаемых поставщиком OLE DB собственного клиента SQL Server, см. в разделе "Свойства инициализации" и "Авторизация" (поставщик OLE DB собственного клиента). Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Поставщик OLE DB собственного клиента SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для новой разработки. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server .
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ каталог. ] [ схема. Объект ]
Удаленная таблица или представление, содержащие данные, которые должны быть прочитаны OPENROWSET
. Это может быть объект с именем из трех частей со следующими компонентами:
- каталог (необязательно) — имя каталога или базы данных, в которых хранится указанный объект.
- схема (необязательно) — имя схемы или владелец указанного объекта.
- объект — имя объекта, уникальным образом идентифицирующее объект, с которым производится взаимодействие.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
"query"
Строковая константа, отправленная поставщиком и выполняемая поставщиком. Локальный экземпляр SQL Server не обрабатывает этот запрос, но обрабатывает результаты запроса, возвращаемые поставщиком, сквозным запросом. Сквозные запросы полезны, если они используются для поставщиков, которые не предоставляют доступ к табличным данным с помощью имен таблиц, но только с помощью языка команд. Передаваемые запросы поддерживаются на удаленном сервере настолько, насколько поставщик запросов поддерживает объект OLE DB Command и его обязательные интерфейсы.
Дополнительные сведения см. в интерфейсах SQL Server Native Client (OLE DB).
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;
Замечания
Функцию OPENROWSET
можно использовать для доступа к удаленным данным из источников OLE DB только в том случае, если параметр реестра DisallowAdhocAccess явно содержит значение 0 для указанного поставщика, а также если включен расширенный параметр конфигурации Ad Hoc Distributed Queries. Если эти параметры не заданы, поведение по умолчанию не разрешает нерегламентированный доступ.
При доступе к удаленным источникам данных OLE DB удостоверение входа доверенных подключений не будет автоматически делегировано с сервера, на котором клиент подключен к серверу, который запрашивается. Делегирование проверки подлинности должно быть настроено.
Имена каталогов и схем требуются, если поставщик данных поддерживает несколько каталогов и схем в указанном источнике данных. Значения и catalog
schema
могут быть опущены, если поставщик данных не поддерживает их. Если поставщик поддерживает только имена схем, необходимо указать двух частей формы schema.object
. Если поставщик поддерживает только имена каталогов, необходимо указать трехкомпонентное имя формы catalog.schema.object
. Дополнительные сведения см . в соглашениях о синтаксисе Transact-SQL.
Для сквозных запросов, использующих поставщик OLE DB собственного клиента SQL Server, требуются три части.
OPENROWSET
не принимает переменные для своих аргументов.
Любой вызов функции OPENDATASOURCE
, OPENQUERY
или OPENROWSET
в предложении FROM
вычисляется отдельно и независимо от любого вызова этих функций, используемого как назначение при обновлении, даже если в двух таких вызовах будут заданы идентичные аргументы. В частности, условия фильтра или соединения, применяемые к результатам одного из таких вызовов, никак не влияют на результаты другого.
Разрешения
OPENROWSET
разрешения определяются разрешениями имени пользователя, передаваемого поставщику данных.
Примеры
В этом разделе приведены общие примеры использования OPENROWSET.
Примечание.
Примеры использования INSERT...SELECT * FROM OPENROWSET(BULK...)
см. в статье OPENROWSET BULK (Transact-SQL).
Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Поставщик OLE DB собственного клиента SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для новой разработки. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server .
А. Использование OPENROWSET с select и поставщиком OLE DB собственного клиента SQL Server
В следующем примере поставщик OLE DB собственного клиента SQL Server используется для доступа к HumanResources.Department
таблице в AdventureWorks2022
базе данных на удаленном сервере Seattle1
. (Используйте MSOLEDBSQL
для современного поставщика данных OLE DB Microsoft SQL Server, заменяющего SQLNCLI
.) Инструкция SELECT
используется для определения возвращаемого набора строк. Строка поставщика содержит ключевые слова Server
и Trusted_Connection
. Эти ключевые слова распознаются поставщиком OLE DB собственного клиента SQL Server.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2022.HumanResources.Department
ORDER BY GroupName, Name'
) AS a;
В. Использование поставщика Microsoft OLE DB для Jet
Следующий пример обращается к Customers
таблице в базе данных Microsoft Access Northwind
с помощью поставщика Microsoft OLE DB для Jet.
Примечание.
В этом примере предполагается, что Microsoft Access установлен. Чтобы запустить этот пример, необходимо установить Northwind
базу данных.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
В. Использование OPENROWSET и другой таблицы в INNER JOIN
В следующем примере выбираются все данные из таблицы из Customers
локального экземпляра базы данных SQL Server Northwind
и из Orders
таблицы из базы данных Microsoft Access Northwind
, хранящейся на одном компьютере.
Примечание.
В этом примере предполагается, что Microsoft Access установлен. Чтобы запустить этот пример, необходимо установить Northwind
базу данных.
USE Northwind;
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c
INNER JOIN OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';'admin';'',
Orders) AS o
ON c.CustomerID = o.CustomerID;