Поделиться через


OPENDATASOURCE (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Передает сведения о нерегламентированном соединении в виде одной из четырех частей имени объекта, без имени связанного сервера.

Соглашения о синтаксисе Transact-SQL

Синтаксис

OPENDATASOURCE ( 'provider_name', 'init_string' )  

Аргументы

'provider_name'

Имя, зарегистрированное как PROGID имя поставщика OLE DB, используемое для доступа к источнику данных. Аргумент provider_name имеет тип данных char и не имеет значения по умолчанию.

Внимание

Собственный клиент 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 .

'init_string'

Строка подключения, передаваемая в интерфейс IDataInitialize поставщика назначения. Синтаксис строки поставщика основан на парах "ключевое слово — значение", разделенных точкой с запятой, например: "ключевое_слово1=значение ; ключевое_слово2=значение".

Сведения о определенных парах ключевых слов и значений, поддерживаемых поставщиком, см. в пакете SDK microsoft Data Access. Данная документация определяет основной синтаксис. В приведенной ниже таблице представлены наиболее часто используемые ключевые слова в аргументе init_string.

Ключевое слово Свойство OLE DB Допустимые значения и описание
Источник данных DBPROP_INIT_DATASOURCE Имя источника данных для подключения. Различные поставщики интерпретируют его по-разному. Для поставщика OLE DB собственного клиента SQL Server это означает имя сервера. Для поставщика Jet OLE DB таким образом определяется полный путь к MDB-файлу или XLS-файлу.
Расположение DBPROP_INIT_LOCATION Расположение базы данных для подключения.
Расширенные свойства DBPROP_INIT_PROVIDERSTRING Строка подключения этого поставщика.
Время ожидания подключения DBPROP_INIT_TIMEOUT Время, по истечении которого попытка соединения признается неудачной.
Идентификатор пользователя DBPROP_AUTH_USERID Идентификатор пользователя для соединения.
Пароль DBPROP_AUTH_PASSWORD Пароль для соединения.
Каталог DBPROP_INIT_CATALOG Имя первоначального каталога или каталога по умолчанию при подключении к источнику данных.
Встроенные функции безопасности DBPROP_AUTH_INTEGRATED SSPI для указания проверки подлинности Windows

Замечания

OPENROWSET всегда наследует параметры сортировки экземпляра независимо от параметров сортировки, заданных для столбцов.

Функцию OPENDATASOURCE можно использовать для доступа к удаленным данным из источников OLE DB только в том случае, если параметр реестра DisallowAdhocAccess явно содержит значение 0 для указанного поставщика, а также если включен расширенный параметр конфигурации Ad Hoc Distributed Queries. Если эти параметры не установлены, поведение по умолчанию запрещает нерегламентированный доступ.

Функция OPENDATASOURCE может применяться в тех же местах в коде Transact-SQL, где и имя связанного сервера. Следовательно, функцию OPENDATASOURCE можно использовать в качестве первой из четырех частей имени, которое ссылается на таблицу или представление в инструкциях SELECT, INSERT, UPDATE, DELETE или в удаленной хранимой процедуре в инструкции EXECUTE. При выполнении удаленных хранимых процедур OPENDATASOURCE следует ссылаться на другой экземпляр SQL Server. Функция OPENDATASOURCE не может принимать переменные в качестве аргументов.

Функции OPENROWSET и OPENDATASOURCE должны использоваться только для ссылки на источники данных OLE DB, обращения к которым происходят нечасто. Задайте связанный сервер для любых источников данных, доступ к которым производится достаточно часто. Функции OPENDATASOURCE и OPENROWSET не обеспечивают полную поддержку для определения связанных серверов. Например, отсутствует функция управления безопасностью и возможность запросить данные каталога. Вся информация о соединении, включая пароли, должна предоставляться каждый раз при вызове OPENDATASOURCE.

Внимание

Проверка подлинности Windows намного надежней, чем проверка подлинности SQL Server. Везде, где возможно, следует применять проверку подлинности Windows. Не рекомендуется использовать функцию OPENDATASOURCE с паролями, явно присутствующими в строке соединения.

Требования к соединениям для каждого поставщика похожи на требования к этим параметрам при создании связанных серверов. Подробные сведения для многих распространенных поставщиков приведены в статье sp_addlinkedserver (Transact-SQL).

Любой вызов функции OPENDATASOURCE, OPENQUERY или OPENROWSET в предложении FROM вычисляется отдельно и независимо от любого вызова этих функций, используемого как назначение при обновлении, даже если в двух таких вызовах будут заданы идентичные аргументы. В частности, условия фильтра или соединения, применяемые к результатам одного из таких вызовов, никак не влияют на результаты другого.

Разрешения

Любой пользователь может выполнить OPENDATASOURCE. Разрешения, применяемые для подключения к удаленному серверу, определяются из строки подключения.

Примеры

А. Использование функции OPENDATASOURCE с инструкцией SELECT и драйвером OLE DB для SQL Server

В следующем примере используется драйвер Microsoft OLE DB для SQL Server для доступа к таблице HumanResources.Department в базе данных AdventureWorks2022 на удаленном сервере Seattle1. Инструкция SELECT используется для определения возвращаемого набора строк. Строка поставщика содержит ключевые слова Server и Trusted_Connection. Эти ключевые слова распознаются драйвером OLE DB SQL Server.

SELECT GroupName, Name, DepartmentID  
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2022;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department  
ORDER BY GroupName, Name;  

B. Использование функции OPENDATASOURCE с инструкцией SELECT и поставщиком OLE DB для SQL Server

В следующем примере создается нерегламентированное подключение к Payroll экземпляру SQL Server на сервере LondonAdventureWorks2022.HumanResources.Employee и запрашивается таблица.

Примечание.

Использование SQLNCLI перенаправит SQL Server на последнюю версию поставщика OLE DB собственного клиента SQL Server. Предполагается, что поставщик OLE DB будет зарегистрирован в реестре с указанным идентификатором PROGID.

Внимание

Собственный клиент OLE DB для SQL Server (SQLNCLI) объявляется нерекомендуемым для новых разработок. Вместо этого используйте новый драйвер Microsoft OLE DB для SQL Server (MSOLEDBSQL), который будет обновлен с самыми последними серверными компонентами.

SELECT *  
FROM OPENDATASOURCE('SQLNCLI',  
    'Data Source=London\Payroll;Integrated Security=SSPI')  
    .AdventureWorks2022.HumanResources.Employee;  

В. Использование поставщика Microsoft OLE DB для Jet

В следующем примере создается нерегламентированное соединение с электронной таблицей Excel в формате 1997 — 2003.

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',  
    'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;  

Следующие шаги