OPENDATASOURCE (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Proporciona información de conexión ad hoc como parte de un nombre de objeto de cuatro partes sin utilizar un nombre de servidor vinculado.

Convenciones de sintaxis de Transact-SQL

Sintaxis

OPENDATASOURCE ( 'provider_name', 'init_string' )  

Argumentos

'provider_name'

Es el nombre registrado como PROGID del proveedor OLE DB utilizado para obtener acceso al origen de datos. provider_name es un tipo de datos char que carece de valor predeterminado.

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). Para nuevos trabajos de desarrollo, no se recomiendan ni el proveedor OLE DB de SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft para SQL Server (SQLOLEDB) heredado. Cambie al nuevo Controlador Microsoft OLE DB para SQL Server de ahora en adelante.

"init_string"

Es la cadena de conexión que se pasa a la interfaz IDataInitialize del proveedor de destino. La sintaxis de cadena del proveedor se basa en pares palabra clave-valor separados por puntos y coma, como: 'palabra clave1=valor ; palabra clave2=valor'.

Para conocer los pares de palabra clave y valor admitidos, vea Microsoft Data Access SDK. En esta documentación se define la sintaxis básica. En la siguiente tabla se muestran las palabras clave más utilizadas en el argumento init_string.

Palabra clave Propiedad OLE DB Valores válidos y descripción
Origen de datos DBPROP_INIT_DATASOURCE Nombre del origen de datos al que se va a conectar. Distintos proveedores lo interpretan de formas distintas. Para un proveedor OLE DB de SQL Native Client SQL Server , indica el nombre del servidor. Para un proveedor OLE DB para Jet, indica la ruta de acceso completa al archivo .mdb o al archivo .xls.
Location DBPROP_INIT_LOCATION Ubicación de la base de datos a la que se va a conectar.
Propiedades extendidas DBPROP_INIT_PROVIDERSTRING Cadena de conexión específica del proveedor.
Tiempo de espera de conexión DBPROP_INIT_TIMEOUT Valor de tiempo de espera después del cual se produce un error en el intento de conexión.
Id. de usuario DBPROP_AUTH_USERID Id. de usuario que se va a utilizar para la conexión.
Contraseña DBPROP_AUTH_PASSWORD Contraseña que se va a utilizar para la conexión.
Catálogo DBPROP_INIT_CATALOG Nombre del catálogo inicial o predeterminado al conectarse al origen de datos.
Seguridad integrada DBPROP_AUTH_INTEGRATED SSPI, para especificar la autenticación de Windows

Comentarios

OPENROWSET siempre hereda la intercalación de la instancia, independientemente de la intercalación establecida para las columnas.

OPENDATASOURCE se puede usar para tener acceso a datos remotos desde orígenes de datos de OLE DB solo cuando la opción de registro DisallowAdhocAccess está establecida explícitamente en 0 para el proveedor especificado y la opción de configuración avanzada Ad Hoc Distributed Queries está habilitada. Cuando no se establecen estas opciones, el comportamiento predeterminado no permite el acceso ad hoc.

Es posible utilizar la función OPENDATASOURCE en las mismas ubicaciones de la sintaxis Transact-SQL como un nombre del servidor vinculado. Por tanto, se puede utilizar OPENDATASOURCE como la primera parte de un nombre de cuatro partes que hace referencia a un nombre de tabla o vista en una instrucción SELECT, INSERT, UPDATE o DELETE, o a un procedimiento almacenado remoto en una instrucción EXECUTE. Cuando se ejecutan procedimientos almacenados remotos, OPENDATASOURCE debe hacer referencia a otra instancia de SQL Server. OPENDATASOURCE no acepta variables como argumentos.

Al igual que la función OPENROWSET, OPENDATASOURCE solo debe hacer referencia a orígenes de datos OLE DB a los que se tiene acceso con poca frecuencia. Defina un servidor vinculado para los orígenes de datos a los que tiene acceso varias veces. Ni OPENDATASOURCE ni OPENROWSET proporcionan toda la funcionalidad de definiciones de servidores vinculados, como la administración de seguridad y la capacidad de consultar información de catálogos. Toda la información de conexión, incluidas las contraseñas, se debe proporcionar siempre que se llama OPENDATASOURCE.

Importante

La autenticación de Windows es mucho más segura que la de SQL Server. Siempre que sea posible, debe utilizar la Autenticación de Windows. OPENDATASOURCE no se debe utilizar con contraseñas explícitas en la cadena de conexión.

Los requisitos de conexión de cada proveedor son similares a los requisitos de esos parámetros cuando se crean servidores vinculados. En el artículo sp_addlinkedserver (Transact-SQL) se incluye información detallada sobre muchos proveedores comunes.

Las llamadas a OPENDATASOURCE, OPENQUERY o OPENROWSET en la cláusula FROM se evalúan por separado y de forma independiente de otras llamadas a estas funciones usadas como destino de la actualización, incluso si se han suministrado argumentos idénticos a las dos llamadas. En particular, las condiciones de filtro o combinación aplicadas en el resultado de una de esas llamadas no tienen ningún efecto en los resultados de la otra llamada.

Permisos

Todos los usuarios pueden ejecutar OPENDATASOURCE. Los permisos que se utilizan para conectarse al servidor remoto se determinan a partir de la cadena de conexión.

Ejemplos

A. Uso de OPENDATASOURCE con SELECT y OLE DB Driver de SQL Server

En el siguiente ejemplo se usa Microsoft OLE DB Driver for SQL Server con el fin de tener acceso a la tabla HumanResources.Department de la base de datos AdventureWorks2022 en el servidor remoto Seattle1. Se utiliza una instrucción SELECT para definir el conjunto de filas devuelto. La cadena de proveedor contiene las palabras clave Server y Trusted_Connection. OLE DB Driver de SQL Server reconoce estas palabras clave.

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

B. Uso de OPENDATASOURCE con SELECT y el proveedor OLE DB de SQL Server

En el ejemplo siguiente se crea una conexión ad hoc a la instancia de Payroll de SQL Server en el servidor London, y se consulta la tabla AdventureWorks2022.HumanResources.Employee.

Nota

El uso de SQLNCLI redirigirá SQL Server a la última versión del proveedor OLE DB de SQL Server Native Client. Se espera que el proveedor OLE DB se registre con el PROGID especificado en el registro.

Importante

El proveedor OLE DB de SQL Server Native Client (SQLNCLI) permanece en desuso y no se recomienda utilizarlo para nuevos trabajos de desarrollo. En su lugar, use el nuevo Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL), que se actualizará con las características de servidor más recientes.

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

C. Usar el proveedor Microsoft OLE DB para Jet

En el ejemplo siguiente se crea una conexión ad hoc a una hoja de cálculo de Excel en el formato 1997 - 2003.

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

Pasos siguientes