Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores
OPENROWSET
es una alternativa a acceder a las tablas de un servidor vinculado y es un método ad hoc único de conexión y acceso a datos remotos. Un OPENROWSET
comando T-SQL incluye toda la información de conexión necesaria para acceder a datos remotos desde un origen de datos externo.
Se OPENROWSET
puede hacer referencia a la función en la FROM
cláusula de una consulta como si fuera un nombre de tabla. También OPENROWSET
se puede hacer referencia a la función como la tabla de destino de una INSERT
instrucción , UPDATE
o DELETE
, sujeta a las funcionalidades del proveedor de datos. Aunque la consulta puede devolver varios conjuntos de resultados, OPENROWSET
solo devuelve el primero.
Sugerencia
Para referencias más frecuentes a orígenes de datos externos, use servidores vinculados en su lugar. Para obtener más información, vea Servidores vinculados (Motor de base de datos).
OPENROWSET
sin el BULK
operador solo está disponible en SQL Server. Detalles y vínculos a ejemplos similares en otras plataformas:
-
OPENROWSET
admite operaciones masivas a través de un proveedor integrado enBULK
muchas plataformas del motor de base de datos, como Azure y Microsoft Fabric. Para obtener más información, vea OPENROWSET BULK (Transact-SQL). - Para obtener ejemplos sobre Azure SQL Instancia administrada, consulte Consulta de orígenes de datos mediante OPENROWSET.
- Azure SQL Database solo admite OPENROWSET BULK (Transact-SQL).
- Para obtener información y ejemplos con grupos de SQL sin servidor en Azure Synapse, consulte Uso de OPENROWSET mediante el grupo de SQL sin servidor en Azure Synapse Analytics. Los grupos de SQL dedicados en Azure Synapse no admiten la
OPENROWSET
función.
Convenciones de sintaxis de Transact-SQL
Sintaxis
OPENROWSET
La sintaxis se usa para consultar orígenes de datos externos:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Argumentos
"provider_name"
Cadena de caracteres que representa el nombre descriptivo (o PROGID
) del proveedor de datos tal como se especifica en el Registro.
provider_name no tiene valor predeterminado. Los ejemplos de nombre de proveedor son MSOLEDBSQL
, Microsoft.Jet.OLEDB.4.0
o MSDASQL
.
'datasource'
Constante de cadena que corresponde a un origen de datos determinado.
datasource es la DBPROP_INIT_DATASOURCE
propiedad que se va a pasar a la IDBProperties
interfaz del proveedor para inicializar el proveedor. Normalmente, esta cadena incluye el nombre del archivo de base de datos, el nombre de un servidor de bases de datos o un nombre que el proveedor entiende para localizar la base de datos o las bases de datos.
El origen de datos puede ser la ruta de acceso de archivo C:\SAMPLES\Northwind.mdb'
para el proveedor Microsoft.Jet.OLEDB.4.0
, o bien la cadena de conexión Server=Seattle1;Trusted_Connection=yes;
para el proveedor MSOLEDBSQL
.
"user_id"
Constante de cadena que es el nombre de usuario pasado al proveedor de datos especificado.
user_id especifica el contexto de seguridad de la conexión y se pasa como la DBPROP_AUTH_USERID
propiedad para inicializar el proveedor.
user_id no puede ser un nombre de inicio de sesión de Microsoft Windows.
'password'
Constante de cadena que es la contraseña de usuario que se va a pasar al proveedor de datos.
la contraseña se pasa como la DBPROP_AUTH_PASSWORD
propiedad al inicializar el proveedor.
la contraseña no puede ser una contraseña de Microsoft Windows. Por ejemplo:
SELECT a.* FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\SAMPLES\Northwind.mdb';
'<user name>';
'<password>',
Customers
) AS a;
"provider_string"
Un cadena de conexión específico del proveedor que se pasa como propiedad DBPROP_INIT_PROVIDERSTRING
para inicializar el proveedor OLE DB. Normalmente, provider_string encapsula toda la información de conexión necesaria para inicializar el proveedor.
Para obtener una lista de palabras clave que reconoce el proveedor OLE DB de SQL Server Native Client, vea Propiedades de inicialización y autorización (proveedor OLE DB de Native Client). 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.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ catalog. ] [ esquema. ] (objeto)
Tabla o vista remota que contiene los datos que OPENROWSET
debe leer. Puede ser un objeto de nombre de tres partes con los componentes siguientes:
- catalog (opcional): el nombre del catálogo o de la base de datos donde reside el objeto especificado.
- schema (opcional): el nombre del esquema o propietario del objeto para el objeto especificado.
- object: el nombre del objeto que identifica de forma única al objeto con el que se va a trabajar.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
'query'
Constante de cadena enviada y ejecutada por el proveedor. La instancia local de SQL Server no procesa esta consulta, pero procesa los resultados de la consulta devueltos por el proveedor, una consulta de paso a través. Las consultas de paso a través son útiles cuando se usan en proveedores que no hacen que sus datos tabulares estén disponibles a través de nombres de tabla, sino solo a través de un lenguaje de comandos. El servidor remoto admite las consultas de paso a través siempre y cuando el proveedor de consultas admita el objeto Command de OLE DB y sus interfaces obligatorias.
Para obtener más información, vea Interfaces de 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;
Comentarios
OPENROWSET
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.
Al acceder a orígenes de datos OLE DB remotos, la identidad de inicio de sesión de las conexiones de confianza no se delega automáticamente desde el servidor en el que el cliente está conectado al servidor que se está consultando. Debe configurarse la delegación de autenticación.
Los nombres de catálogo y esquema son necesarios si el proveedor de datos admite varios catálogos y esquemas en el origen de datos especificado. Los valores de catalog
y schema
se pueden omitir cuando el proveedor de datos no los admite. Si el proveedor solo admite nombres de esquema, se debe especificar un nombre de dos partes del formulario schema.object
. Si el proveedor solo admite nombres de catálogo, se debe especificar un nombre de tres partes del formulario catalog.schema.object
. Para más información, vea Convenciones de sintaxis de Transact-SQL.
Los nombres de tres partes son necesarios para las consultas de paso a través que usan el proveedor OLE DB de SQL Server Native Client.
OPENROWSET
no acepta variables para sus argumentos.
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
OPENROWSET
los permisos se determinan mediante los permisos del nombre de usuario que se pasa al proveedor de datos.
Ejemplos
En esta sección se proporcionan ejemplos generales para demostrar cómo usar OPENROWSET.
Nota:
Para obtener ejemplos que muestran el uso INSERT...SELECT * FROM OPENROWSET(BULK...)
de , vea OPENROWSET BULK (Transact-SQL).
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.
A Uso de OPENROWSET con SELECT y el proveedor OLE DB de SQL Server Native Client
En el siguiente ejemplo se usa el proveedor OLE DB de SQL Server Native Client para tener acceso a la tabla HumanResources.Department
de la base de datos AdventureWorks2022
en el servidor remoto Seattle1
. (Use MSOLEDBSQL
para el proveedor de datos OLE DB moderno de Microsoft SQL Server que reemplazó SQLNCLI
). Se usa una SELECT
instrucción para definir el conjunto de filas devuelto. La cadena de proveedor contiene las palabras clave Server
y Trusted_Connection
. El proveedor OLE DB de SQL Server Native Client reconoce estas palabras clave.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2022.HumanResources.Department
ORDER BY GroupName, Name'
) AS a;
B. Usar el proveedor OLE DB de Microsoft para Jet
En el siguiente ejemplo se obtiene acceso a la tabla Customers
de la base de datos Northwind
de Microsoft Access a través del proveedor Microsoft OLE DB para Jet.
Nota:
En este ejemplo se supone que Microsoft Access está instalado. Para ejecutar este ejemplo, debe instalar la Northwind
base de datos.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
C. Usar OPENROWSET y otra tabla en inner JOIN
En el ejemplo siguiente se seleccionan todos los datos de la tabla de la Customers
instancia local de la base de datos de SQL Server Northwind
y de la Orders
tabla de la base de datos de Microsoft Access Northwind
almacenada en el mismo equipo.
Nota:
En este ejemplo se supone que Microsoft Access está instalado. Para ejecutar este ejemplo, debe instalar la Northwind
base de datos.
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;