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 на сервере London
AdventureWorks2022.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$] ;