OPENDATASOURCE (Transact-SQL)
Предоставляет сведения о нерегламентированном подключении в виде элемента имени объекта, состоящего из четырех частей, без использования имени связанного сервера.
Синтаксические обозначения в Transact-SQL
Синтаксис
OPENDATASOURCE ( provider_name, init_string )
Аргументы
provider_name
Имя, зарегистрированное как PROGID имя поставщика OLE DB, используемое для доступа к источнику данных. Аргумент provider_name имеет тип данных char и не имеет значения по умолчанию.init_string
Строка соединения, передаваемая в интерфейс IDataInitialize поставщика назначения. Синтаксис строки поставщика основан на парах «ключевое_слово-значение», разделенных точкой с запятой, например: 'keyword1=value; keyword2=value**'**.Описание конкретных пар «ключевое_слово-значение», поддерживаемых поставщиком, см. в пакете Microsoft Data Access SDK. Данная документация определяет основной синтаксис. Следующая таблица содержит наиболее часто используемые ключевые слова в аргументе 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
Замечания
Функцию 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. Разрешения, применяемые для подключения к удаленному серверу, определяются из строки подключения.
Примеры
В следующем примере создается нерегламентированное соединение с экземпляром Payroll SQL Server на сервере London, затем выполняется запрос к таблице AdventureWorks2012.HumanResources.Employee. (Воспользуйтесь SQLNCLI, и SQL Server выполнит перенаправление к последней версии поставщика OLE DB для собственного клиента SQL Server.)
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=London\Payroll;Integrated Security=SSPI')
.AdventureWorks2012.HumanResources.Employee
В следующем примере создается нерегламентированное соединение с электронной таблицей Excel в формате 1997 — 2003.
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;