OPENROWSET (Transact-SQL)OPENROWSET (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database (solo Instancia administrada) noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

Contiene toda la información de conexión necesaria para tener acceso a datos remotos desde un origen de datos OLE DB.Includes all connection information that is required to access remote data from an OLE DB data source. Es un método alternativo para tener acceso a las tablas de un servidor vinculado y, al mismo tiempo, es un método ad hoc para conectarse y tener acceso a datos remotos utilizando OLE DB.This method is an alternative to accessing tables in a linked server and is a one-time, ad hoc method of connecting and accessing remote data by using OLE DB. Para obtener referencias más frecuentes a orígenes de datos OLE DB, use, en su lugar, servidores vinculados.For more frequent references to OLE DB data sources, use linked servers instead. Para obtener más información, vea Servidores vinculados (motor de base de datos).For more information, see Linked Servers (Database Engine). Se puede hacer referencia a la función OPENROWSET en la cláusula FROM de una consulta como si fuera un nombre de tabla.The OPENROWSET function can be referenced in the FROM clause of a query as if it were a table name. También se puede hacer referencia a la función OPENROWSET como la tabla de destino de una instrucción INSERT, UPDATE o DELETE, según cuál sea la funcionalidad del proveedor OLE DB.The OPENROWSET function can also be referenced as the target table of an INSERT, UPDATE, or DELETE statement, subject to the capabilities of the OLE DB provider. Aunque la consulta puede devolver varios conjuntos de resultados, OPENROWSET solo devuelve el primero.Although the query might return multiple result sets, OPENROWSET returns only the first one.

OPENROWSET también admite operaciones masivas a través de un proveedor integrado BULK que permite que los datos se lean y se devuelvan como un conjunto de filas.OPENROWSET also supports bulk operations through a built-in BULK provider that enables data from a file to be read and returned as a rowset.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
OPENROWSET   
( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'   
   | 'provider_string' }   
   , {   [ catalog. ] [ schema. ] object   
       | 'query'   
     }   
   | BULK 'data_file' ,   
       { FORMATFILE = 'format_file_path' [ <bulk_options> ]  
       | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }  
} )   
  
<bulk_options> ::=  
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ , DATASOURCE = 'data_source_name' ]
   [ , ERRORFILE = 'file_name' ]  
   [ , ERRORFILE_DATASOURCE = 'data_source_name' ]   
   [ , FIRSTROW = first_row ]   
   [ , LASTROW = last_row ]   
   [ , MAXERRORS = maximum_errors ]   
   [ , ROWS_PER_BATCH = rows_per_batch ]  
   [ , ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) [ UNIQUE ] ]
  
   -- bulk_options related to input file format
   [ , FORMAT = 'CSV' ]
   [ , FIELDQUOTE = 'quote_characters']
   [ , FORMATFILE = 'format_file_path' ]   

ArgumentosArguments

'provider_name''provider_name'
Es una cadena de caracteres que representa el nombre descriptivo (o PROGID) del proveedor OLE DB según se especifica en el Registro.Is a character string that represents the friendly name (or PROGID) of the OLE DB provider as specified in the registry. provider_name no tiene valor predeterminado.provider_name has no default value.

'datasource''datasource'
Es una constante de cadena que corresponde a un origen de datos OLE DB determinado.Is a string constant that corresponds to a particular OLE DB data source. datasource es la propiedad DBPROP_INIT_DATASOURCE que se pasará a la interfaz IDBProperties del proveedor para inicializarlo.datasource is the DBPROP_INIT_DATASOURCE property to be passed to the IDBProperties interface of the provider to initialize the provider. Normalmente, esta cadena incluye el nombre del archivo de la base de datos, el nombre del servidor de bases de datos o un nombre comprensible para que el proveedor encuentre las bases de datos.Typically, this string includes the name of the database file, the name of a database server, or a name that the provider understands to locate the database or databases.

'user_id''user_id'
Es una constante de cadena que contiene el nombre de usuario que se pasa al proveedor OLE DB especificado.Is a string constant that is the user name passed to the specified OLE DB provider. user_id indica el contexto de seguridad para la conexión y se pasa como la propiedad DBPROP_AUTH_USERID para inicializar el proveedor.user_id specifies the security context for the connection and is passed in as the DBPROP_AUTH_USERID property to initialize the provider. user_id no puede ser un nombre de inicio de sesión de Microsoft Windows.user_id cannot be a Microsoft Windows login name.

'password''password'
Es una constante de cadena que contiene la contraseña de usuario que se debe pasar al proveedor OLE DB.Is a string constant that is the user password to be passed to the OLE DB provider. password se pasa como la propiedad DBPROP_AUTH_PASSWORD cuando el proveedor se inicializa.password is passed in as the DBPROP_AUTH_PASSWORD property when initializing the provider. password no puede ser una contraseña de Microsoft Windows.password cannot be a Microsoft Windows password.

'provider_string''provider_string'
Es una cadena de conexión específica del proveedor que se pasa como la propiedad DBPROP_INIT_PROVIDERSTRING para inicializar el proveedor OLE DB.Is a provider-specific connection string that is passed in as the DBPROP_INIT_PROVIDERSTRING property to initialize the OLE DB provider. Normalmente, provider_string encapsula toda la información de conexión necesaria para inicializar el proveedor.provider_string typically encapsulates all the connection information required to initialize the provider. Para obtener una lista de palabras clave que el proveedor OLE DB de SQL ServerSQL Server Native Client pueda reconocer, vea Initialization and Authorization Properties (Propiedades de inicialización y autorización).For a list of keywords that are recognized by the SQL ServerSQL Server Native Client OLE DB provider, see Initialization and Authorization Properties.

catalogcatalog
Es el nombre del catálogo o de la base de datos donde reside el objeto especificado.Is the name of the catalog or database in which the specified object resides.

schemaschema
Es el nombre del esquema o propietario del objeto para el objeto especificado.Is the name of the schema or object owner for the specified object.

objectobject
Es el nombre del objeto que identifica unívocamente el objeto con el que se va a trabajar.Is the object name that uniquely identifies the object to work with.

'query''query'
Es una constante de cadena que se envía al proveedor, quien la ejecuta.Is a string constant sent to and executed by the provider. La instancia local de SQL ServerSQL Server no procesa esta consulta, pero sí que procesa los resultados de la consulta devuelta por el proveedor (una consulta de paso a través).The local instance of SQL ServerSQL Server does not process this query, but processes query results returned by the provider, a pass-through query. Las consultas de paso a través resultan útiles cuando se utilizan en proveedores que no muestran sus datos tabulares a través de nombres de tablas, sino solamente a través de un lenguaje de comandos.Pass-through queries are useful when used on providers that do not make available their tabular data through table names, but only through a command language. 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.Pass-through queries are supported on the remote server, as long as the query provider supports the OLE DB Command object and its mandatory interfaces. Para más información, vea Referencia de SQL Server Native Client (OLE DB).For more information, see SQL Server Native Client (OLE DB) Reference.

BULKBULK
Utiliza el proveedor de conjuntos de filas BULK para que OPENROWSET lea datos de un archivo.Uses the BULK rowset provider for OPENROWSET to read data from a file. En SQL ServerSQL Server, OPENROWSET puede leer datos de un archivo sin necesidad de cargarlos en una tabla de destino.In SQL ServerSQL Server, OPENROWSET can read from a data file without loading the data into a target table. Esto le permite utilizar OPENROWSET con una instrucción SELECT simple.This lets you use OPENROWSET with a simple SELECT statement.

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

Los argumentos de la opción BULK le permiten elegir dónde empezar y acabar la lectura de datos, cómo abordar los errores y cómo interpretar los datos.The arguments of the BULK option allow for significant control over where to start and end reading data, how to deal with errors, and how data is interpreted. Por ejemplo, puede especificar que el archivo de datos se lea como un conjunto de filas de una sola fila y una sola columna de tipo varbinary, varchar o nvarchar.For example, you can specify that the data file be read as a single-row, single-column rowset of type varbinary, varchar, or nvarchar. El comportamiento predeterminado se describe en las descripciones de los argumentos que se muestran a continuación.The default behavior is described in the argument descriptions that follow.

Para obtener información acerca del uso de la opción BULK, vea la sección "Comentarios" más adelante en este tema.For information about how to use the BULK option, see "Remarks," later in this topic. Para obtener información acerca de los permisos que necesita la opción BULK, vea la sección "Permisos", más adelante en este tema.For information about the permissions that are required by the BULK option, see "Permissions," later in this topic.

Nota

Cuando se utiliza para importar datos con el modelo de recuperación completa, OPENROWSET (BULK ...) no optimiza el registro.When used to import data with the full recovery model, OPENROWSET (BULK ...) does not optimize logging.

Para más información sobre cómo preparar datos para importaciones masivas, vea Preparar los datos para exportar o importar de forma masiva (SQL Server).For information on preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

'data_file''data_file'
Es la ruta de acceso completa del archivo de datos cuyos datos se copian en la tabla de destino.Is the full path of the data file whose data is to be copied into the target table.
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, data_file puede estar en Azure Blob Storage.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the data_file can be in Azure blob storage. Para ver ejemplos, vea Ejemplos de acceso masivo a datos en Azure Blob Storage.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

<bulk_options><bulk_options>
Especifica uno o más argumentos para la opción BULK.Specifies one or more arguments for the BULK option.

CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }
Especifica la página de códigos de los datos incluidos en el archivo de datos.Specifies the code page of the data in the data file. CODEPAGE solo es pertinente si los datos contienen columnas de tipo char, varchar o text con valores de caracteres mayores que 127 o menores que 32.CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values more than 127 or less than 32.

Importante

CODEPAGE no es una opción admitida en Linux.CODEPAGE is not a supported option on Linux.

Nota

Se recomienda especificar un nombre de intercalación para cada columna en un archivo de formato, excepto cuando quiera que la opción 65001 tenga prioridad sobre la especificación de la página de códigos o la intercalación.We recommend that you specify a collation name for each column in a format file, except when you want the 65001 option to have priority over the collation/code page specification.

Valor de CODEPAGECODEPAGE value DescripciónDescription
ACPACP Convierte columnas de los tipos de datos char, varchar o text de la página de códigos ANSI/MicrosoftMicrosoft Windows (ISO 1252) a la página de códigos de SQL ServerSQL Server.Converts columns of char, varchar, or text data type from the ANSI/MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (valor predeterminado)OEM (default) Convierte columnas de los tipos de datos char, varchar o text de la página de códigos OEM del sistema a la página de códigos de SQL ServerSQL Server.Converts columns of char, varchar, or text data type from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW No se realiza ninguna conversión entre páginas de códigos.No conversion occurs from one code page to another. Ésta es la opción más rápida.This is the fastest option.
code_pagecode_page Indica la página de códigos original en la que se codifican los datos de caracteres incluidos en el archivo de datos; por ejemplo, 850.Indicates the source code page on which the character data in the data file is encoded; for example, 850.

**Importante** Las versiones anteriores a SQL Server 2016 (13.x)SQL Server 2016 (13.x) no admiten la página de códigos 65001 (codificación UTF-8).** Important ** Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) do not support code page 65001 (UTF-8 encoding).

ERRORFILE ='file_name'ERRORFILE ='file_name'
Especifica el archivo utilizado para recopilar filas que tienen errores de formato y no pueden convertirse en un conjunto de filas OLE DB.Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Estas filas se copian en este archivo de errores desde el archivo de datos "tal cual".These rows are copied into this error file from the data file "as is."

El archivo de errores se crea cuando se inicia la ejecución del comando.The error file is created at the start of the command execution. Se producirá un error si el archivo ya existe.An error will be raised if the file already exists. Además, se crea un archivo de control con la extensión .ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. Este archivo hace referencia a cada una de las filas del archivo de errores y proporciona diagnósticos de errores.This file references each row in the error file and provides error diagnostics. Tras corregir los errores, pueden cargarse los datos.After the errors have been corrected, the data can be loaded.
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x), error_file_path puede estar en Azure Blob Storage.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name''errorfile_data_source_name'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Es un origen de datos externo con nombre que apunta a la ubicación de Azure Blob Storage del archivo de error que contendrá los errores encontrados durante la importación.Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. El origen de datos externo se debe crear con la opción TYPE = BLOB_STORAGE que se ha incluido en SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Para más información, vea CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW =first_rowFIRSTROW =first_row
Especifica el número de la primera fila que se va a cargar.Specifies the number of the first row to load. El valor predeterminado es 1.The default is 1. Indica la primera fila del archivo de datos especificado.This indicates the first row in the specified data file. Los números de fila vienen determinados por el recuento de terminadores de fila.The row numbers are determined by counting the row terminators. FIRSTROW está en base 1.FIRSTROW is 1-based.

LASTROW =last_rowLASTROW =last_row
Especifica el número de la última fila que va a cargarse.Specifies the number of the last row to load. El valor predeterminado es 0.The default is 0. Indica la última fila del archivo de datos especificado.This indicates the last row in the specified data file.

MAXERRORS =maximum_errorsMAXERRORS =maximum_errors
Especifica el número máximo de errores de sintaxis o filas no compatibles, tal y como se define en el archivo de formato, que pueden tener lugar antes de que OPENROWSET produzca una excepción.Specifies the maximum number of syntax errors or nonconforming rows, as defined in the format file, that can occur before OPENROWSET throws an exception. Hasta que se alcance el valor de MAXERRORS, OPENROWSET omite todas las filas erróneas, sin cargarlas, y cuenta cada fila errónea como un error.Until MAXERRORS is reached, OPENROWSET ignores each bad row, not loading it, and counts the bad row as one error.

El valor predeterminado de maximum_errors es 10.The default for maximum_errors is 10.

Nota

MAX_ERRORS no se aplica en las restricciones CHECK o para convertir tipos de datos money y bigint.MAX_ERRORS does not apply to CHECK constraints, or to converting money and bigint data types.

ROWS_PER_BATCH =rows_per_batchROWS_PER_BATCH =rows_per_batch
Especifica el número aproximado de filas de datos del archivo de datos.Specifies the approximate number of rows of data in the data file. Este valor debe ser del mismo tipo que el número de filas real.This value should be of the same order as the actual number of rows.

OPENROWSET siempre importa un archivo de datos como un solo lote.OPENROWSET always imports a data file as a single batch. Con todo, si especifica rows_per_batch con un valor > 0, el procesador de consulta usará el valor de rows_per_batch como sugerencia para asignar recursos en el plan de consulta.However, if you specify rows_per_batch with a value > 0, the query processor uses the value of rows_per_batch as a hint for allocating resources in the query plan.

De forma predeterminada, el valor de ROWS_PER_BATCH es desconocido.By default, ROWS_PER_BATCH is unknown. Especificar ROWS_PER_BATCH = 0 es lo mismo que omitir ROWS_PER_BATCH.Specifying ROWS_PER_BATCH = 0 is the same as omitting ROWS_PER_BATCH.

ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )
Sugerencia opcional que especifica la forma en que están ordenados los datos en el archivo.An optional hint that specifies how the data in the data file is sorted. De forma predeterminada, la operación masiva presupone que los datos del archivo no están ordenados.By default, the bulk operation assumes the data file is unordered. El rendimiento podría mejorar si el optimizador de consultas puede aprovechar el orden especificado para generar un plan de consulta más eficaz.Performance might improve if the order specified can be exploited by the query optimizer to generate a more efficient query plan. A continuación se citan algunos ejemplos en los que especificar una ordenación puede ser beneficioso:Examples for when specifying a sort can be beneficial include the following:

  • La inserción de filas en una tabla que tiene un índice clúster, donde los datos del conjunto de filas están ordenados en la clave del índice clúster.Inserting rows into a table that has a clustered index, where the rowset data is sorted on the clustered index key.

  • La combinación del conjunto de filas con otra tabla, donde las columnas de ordenación y combinación coinciden.Joining the rowset with another table, where the sort and join columns match.

  • La agregación de los datos del conjunto de filas por las columnas de ordenación.Aggregating the rowset data by the sort columns.

  • El uso del conjunto de filas como una tabla de origen en la cláusula FROM de una consulta, donde las columnas de ordenación y combinación coinciden.Using the rowset as a source table in the FROM clause of a query, where the sort and join columns match.

UNIQUE especifica que el archivo de datos no tiene entradas duplicadas.UNIQUE specifies that the data file does not have duplicate entries.

Si las filas del archivo de datos no están ordenadas según el orden especificado, o si se ha especificado la sugerencia UNIQUE y hay claves duplicadas, se devuelve un error.If the actual rows in the data file are not sorted according to the order that is specified, or if the UNIQUE hint is specified and duplicates keys are present, an error is returned.

Se requieren alias de columna cuando se utiliza ORDER.Column aliases are required when ORDER is used. La lista de alias de columna debe hacer referencia a la tabla derivada a la que la cláusula BULK está obteniendo acceso.The column alias list must reference the derived table that is being accessed by the BULK clause. Los nombres de columna que se especifican en la cláusula ORDER hacen referencia a esta lista de alias de columna.The column names that are specified in the ORDER clause refer to this column alias list. No se pueden especificar columnas con tipos de valor grande (varchar(max), nvarchar(max), varbinary(max) y xml) ni con tipos de objeto grande (text, ntext e image).Large value types (varchar(max), nvarchar(max), varbinary(max), and xml) and large object (LOB) types (text, ntext, and image) columns cannot be specified.

SINGLE_BLOBSINGLE_BLOB
Devuelve el contenido de data_file como un conjunto de filas de una sola columna y una sola fila de tipo varbinary(max).Returns the contents of data_file as a single-row, single-column rowset of type varbinary(max).

Importante

Recomendamos que importe los datos XML solo mediante la opción SINGLE_BLOB, en vez de SINGLE_CLOB y SINGLE_NCLOB, ya que solo SINGLE_BLOB admite todas las conversiones de codificación de Windows.We recommend that you import XML data only using the SINGLE_BLOB option, rather than SINGLE_CLOB and SINGLE_NCLOB, because only SINGLE_BLOB supports all Windows encoding conversions.

SINGLE_CLOBSINGLE_CLOB
Al leer data_file como ASCII, el contenido se devuelve como un conjunto de filas de tipo varchar(max) de una sola fila y una sola columna, por medio de la intercalación de la base de datos actual.By reading data_file as ASCII, returns the contents as a single-row, single-column rowset of type varchar(max), using the collation of the current database.

SINGLE_NCLOBSINGLE_NCLOB
Al leer data_file como UNICODE, el contenido se devuelve como un conjunto de filas de tipo nvarchar(max) de una sola fila y una sola columna, por medio de la intercalación de la base de datos actual.By reading data_file as UNICODE, returns the contents as a single-row, single-column rowset of type nvarchar(max), using the collation of the current database.

Opciones de formato de los archivos de entradaInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Especifica un archivo de valores separados por comas conforme a la norma RFC 4180.Specifies a comma separated values file compliant to the RFC 4180 standard.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
Especifica la ruta de acceso completa de un archivo de formato.Specifies the full path of a format file. SQL ServerSQL Server admite dos tipos de archivos de formato: XML y no XML.supports two types of format files: XML and non-XML.

Es necesario usar un archivo de formato para definir los tipos de columna del conjunto de resultados.A format file is required to define column types in the result set. La única excepción es cuando se especifica SINGLE_CLOB, SINGLE_BLOB o SINGLE_NCLOB; en este caso, no es necesario usar el archivo de formato.The only exception is when SINGLE_CLOB, SINGLE_BLOB, or SINGLE_NCLOB is specified; in which case, the format file is not required.

Para más información sobre los formatos de archivo, vea Usar un archivo de formato para importar datos de forma masiva (SQL Server).For information about format files, see Use a Format File to Bulk Import Data (SQL Server).

Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, format_file_path puede estar en Azure Blob Storage.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage. Para ver ejemplos, vea Ejemplos de acceso masivo a datos en Azure Blob Storage.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Especifica un carácter que se usará como carácter de comillas en el archivo CSV.Specifies a character that will be used as the quote character in the CSV file. Si no se especifica, se usará el carácter de comillas (") como carácter de comillas, según define la norma RFC 4180.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

NotasRemarks

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.OPENROWSET can be used to access remote data from OLE DB data sources only when the DisallowAdhocAccess registry option is explicitly set to 0 for the specified provider, and the Ad Hoc Distributed Queries advanced configuration option is enabled. Cuando no se establecen estas opciones, el comportamiento predeterminado no permite el acceso ad hoc.When these options are not set, the default behavior does not allow for ad hoc access.

Al tener acceso remoto a orígenes de datos OLE DB, la identidad de inicio de sesión de las conexiones de confianza no se delegan automáticamente del servidor en el que el cliente se conecta al servidor que se consulta.When accessing remote OLE DB data sources, the login identity of trusted connections is not automatically delegated from the server on which the client is connected to the server that is being queried. Debe configurarse la delegación de autenticación.Authentication delegation must be configured.

Los nombres de catálogo y esquema son necesarios si el proveedor OLE DB admite varios catálogos y esquemas en el origen de datos especificado.Catalog and schema names are required if the OLE DB provider supports multiple catalogs and schemas in the specified data source. Los valores de catálogo y esquema pueden omitirse si el proveedor OLE DB no los admite.Values for catalog and )schema can be omitted when the OLE DB provider does not support them. Si el proveedor solamente admite nombres de esquema, se debe especificar un nombre de dos partes con el formato schema.object.If the provider supports only schema names, a two-part name of the form schema.object must be specified. Si el proveedor solamente admite nombres de catálogo, se debe especificar un nombre de tres partes con el formato catalog.schema.object.If the provider supports only catalog names, a three-part name of the form catalog.schema.object must be specified. Es necesario especificar nombres de tres partes para las consultas de paso a través que usen el proveedor OLE DB de SQL ServerSQL Server Native Client.Three-part names must be specified for pass-through queries that use the SQL ServerSQL Server Native Client OLE DB provider. Para más información, vea Convenciones de sintaxis de Transact-SQL (Transact-SQL).For more information, see Transact-SQL Syntax Conventions (Transact-SQL).

OPENROWSET no acepta variables para sus argumentos.OPENROWSET does not accept variables for its arguments.

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.Any call to OPENDATASOURCE, OPENQUERY, or OPENROWSET in the FROM clause is evaluated separately and independently from any call to these functions used as the target of the update, even if identical arguments are supplied to the two calls. 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.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

Utilizar OPENROWSET con la opción BULKUsing OPENROWSET with the BULK Option

Las siguientes mejoras de Transact-SQLTransact-SQL admiten la función OPENROWSET(BULK…):The following Transact-SQLTransact-SQL enhancements support the OPENROWSET(BULK...) function:

  • Las cláusulas FROM que se usan con SELECT pueden llamar a OPENROWSET(BULK...) en lugar de indicar un nombre de tabla, con toda la funcionalidad de SELECT.A FROM clause that is used with SELECT can call OPENROWSET(BULK...) instead of a table name, with full SELECT functionality.

    OPENROWSET con la opción BULK requiere un nombre de correlación en la cláusula FROM, que también recibe el nombre de alias o variable de intervalo.OPENROWSET with the BULK option requires a correlation name, also known as a range variable or alias, in the FROM clause. Pueden especificarse alias de columna.Column aliases can be specified. Si no se especifica una lista de alias de columna, el archivo de formato debe incluir nombres de columna.If a column alias list is not specified, the format file must have column names. Al especificar alias de columnas se anulan los nombres de columnas en el archivo de formato:Specifying column aliases overrides the column names in the format file, such as:

    FROM OPENROWSET(BULK...) AS table_alias

    FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)

Importante

Si AS <table_alias> no se puede agregar, se producirá el error:Failure to add the AS <table_alias> will result in the error:
Mensaje 491, Nivel 16, Estado 1, Línea 20Msg 491, Level 16, State 1, Line 20
Debe especificarse un nombre de correlación para el conjunto de filas masivo en la cláusula FROM.A correlation name must be specified for the bulk rowset in the from clause.

  • Una instrucción SELECT...FROM OPENROWSET(BULK...) consulta los datos directamente en el archivo, sin importar los datos a una tabla.A SELECT...FROM OPENROWSET(BULK...) statement queries the data in a file directly, without importing the data into a table. Las instrucciones SELECT...FROM OPENROWSET(BULK...) también pueden mostrar los alias de las columnas masivas usando un archivo de formato para especificar los nombres de las columnas y también los tipos de datos.SELECT...FROM OPENROWSET(BULK...) statements can also list bulk-column aliases by using a format file to specify column names, and also data types.

  • Usar OPENROWSET(BULK...) como tabla de origen en una instrucción INSERT o MERGE permite realizar una importación masiva desde un archivo de datos a una tabla de SQL ServerSQL Server.Using OPENROWSET(BULK...) as a source table in an INSERT or MERGE statement bulk imports data from a data file into a SQL ServerSQL Server table. Para más información, vea Importación en bloque de datos mediante las instrucciones BULK INSERT u OPENROWSET(BULK...) (SQL Server).For more information, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server) .

  • Cuando se usa la opción OPENROWSET BULK BULK con una instrucción INSERT, la cláusula BULK admite sugerencias de tabla.When the OPENROWSET BULK option is used with an INSERT statement, the BULK clause supports table hints. Además de las sugerencias de tabla normales, como TABLOCK, la cláusula BULK puede aceptar las sugerencias de tablas especializadas siguientes: IGNORE_CONSTRAINTS (solo pasa por alto las restricciones CHECK y FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTS y KEEPIDENTITY.In addition to the regular table hints, such as TABLOCK, the BULK clause can accept the following specialized table hints: IGNORE_CONSTRAINTS (ignores only the CHECK and FOREIGN KEY constraints), IGNORE_TRIGGERS, KEEPDEFAULTS, and KEEPIDENTITY. Para obtener más información, vea Sugerencias de tabla (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Para más información sobre cómo usar las instrucciones INSERT...SELECT * FROM OPENROWSET(BULK...), vea Importar y exportar datos de forma masiva (SQL Server).For information about how to use INSERT...SELECT * FROM OPENROWSET(BULK...) statements, see Bulk Import and Export of Data (SQL Server). Para obtener más información sobre cuándo se incluyen en el registro de transacciones las operaciones de inserción de filas que se efectúan durante una importación en bloque, vea Requisitos previos para el registro mínimo durante la importación en bloque.For information about when row-insert operations that are performed by bulk import are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import.

Nota

Cuando use OPENROWSET, es importante que entienda el modo en el que SQL ServerSQL Server controla la suplantación.When you use OPENROWSET, it is important to understand how SQL ServerSQL Server handles impersonation. Para más información sobre las consideraciones de seguridad, vea Importación en bloque de datos mediante las instrucciones BULK INSERT u OPENROWSET(BULK...) (SQL Server).For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

Importar de forma masiva datos SQLCHAR, SQLNCHAR o SQLBINARYBulk Importing SQLCHAR, SQLNCHAR or SQLBINARY Data

OPENROWSET(BULK...) presupone que, si no se especifica, la longitud máxima de los datos SQLCHAR, SQLNCHAR o SQLBINARY no supera los 8000 bytes.OPENROWSET(BULK...) assumes that, if not specified, the maximum length of SQLCHAR, SQLNCHAR or SQLBINARY data does not exceed 8000 bytes. Si los datos importados están en un campo de datos LOB que incluye cualquier objeto varchar(max), nvarchar(max) o varbinary(max) que supera los 8000 bytes, debe usar un archivo de formato XML que defina la longitud máxima para el campo de datos.If the data being imported is in a LOB data field that contains any varchar(max), nvarchar(max), or varbinary(max) objects that exceed 8000 bytes, you must use an XML format file that defines the maximum length for the data field. Para especificar la longitud máxima, edite el archivo de formato y declare el atributo MAX_LENGTH.To specify the maximum length, edit the format file and declare the MAX_LENGTH attribute.

Nota

Un archivo de formato generado automáticamente no especifica la longitud o la longitud máxima de un campo LOB.An automatically generated format file does not specify the length or maximum length for a LOB field. Sin embargo, es posible editar un archivo de formato y especificar la longitud o la longitud máxima manualmente.However, you can edit a format file and specify the length or maximum length manually.

Exportación o importación masiva de documentos SQLXMLBulk Exporting or Importing SQLXML Documents

Para importar o exportar de forma masiva datos SQLXML, utilice uno de los tipos de datos siguientes en el archivo de formato.To bulk export or import SQLXML data, use one of the following data types in your format file.

Tipo de datosData type EfectoEffect
SQLCHAR o SQLVARYCHARSQLCHAR or SQLVARYCHAR Los datos se envían a la página de códigos del cliente o a la página de códigos implícita por la intercalación.The data is sent in the client code page or in the code page implied by the collation).
SQLNCHAR o SQLNVARCHARSQLNCHAR or SQLNVARCHAR Los datos se envían como datos Unicode.The data is sent as Unicode.
SQLBINARY o SQLVARYBINSQLBINARY or SQLVARYBIN Los datos se envían sin realizar ninguna conversión.The data is sent without any conversion.

PermisosPermissions

Los permisos de OPENROWSET vienen determinados por los permisos del nombre de usuario que se pasa al proveedor OLE DB.OPENROWSET permissions are determined by the permissions of the user name that is being passed to the OLE DB provider. Para poder usar la opción BULK, se necesita el permiso ADMINISTER BULK OPERATIONS.To use the BULK option requires ADMINISTER BULK OPERATIONS permission.

EjemplosExamples

A.A. Usar OPENROWSET con SELECT y el proveedor OLE DB de SQL Server Native ClientUsing OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider

En el siguiente ejemplo se usa el proveedor OLE DB de SQL ServerSQL Server Native Client para tener acceso a la tabla HumanResources.Department de la base de datos AdventureWorks2012AdventureWorks2012 en el servidor remoto Seattle1.The following example uses the SQL ServerSQL Server Native Client OLE DB provider to access the HumanResources.Department table in the AdventureWorks2012AdventureWorks2012 database on the remote server Seattle1. (El uso de SQLNCLI y SQL ServerSQL Server redirigirá a la última versión del proveedor OLE DB de SQL ServerSQL Server Native Client). Se utiliza una instrucción SELECT para definir el conjunto de filas devuelto.(Use SQLNCLI and SQL ServerSQL Server will redirect to the latest version of SQL ServerSQL Server Native Client OLE DB Provider.) A SELECT statement is used to define the row set returned. La cadena de proveedor contiene las palabras clave Server y Trusted_Connection.The provider string contains the Server and Trusted_Connection keywords. El proveedor OLE DB de SQL ServerSQL Server Native Client reconoce estas palabras clave.These keywords are recognized by the SQL ServerSQL Server Native Client OLE DB provider.

SELECT a.*  
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',  
     'SELECT GroupName, Name, DepartmentID  
      FROM AdventureWorks2012.HumanResources.Department  
      ORDER BY GroupName, Name') AS a;  

b.B. Usar el proveedor Microsoft OLE DB para JetUsing the Microsoft OLE DB Provider for Jet

En el siguiente ejemplo se obtiene acceso a la tabla Customers de la base de datos Northwind de MicrosoftMicrosoft Access a través del proveedor MicrosoftMicrosoft OLE DB para Jet.The following example accesses the Customers table in the MicrosoftMicrosoft Access Northwind database through the MicrosoftMicrosoft OLE DB Provider for Jet.

Nota

En este ejemplo se supone que está instalado Access.This example assumes that Access is installed. Para ejecutar este ejemplo, debe instalar la base de datos Northwind.To run this example, you must install the Northwind database.

SELECT CustomerID, CompanyName  
   FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',  
      'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';  
      'admin';'',Customers);  
GO  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

C.C. Usar OPENROWSET y otra tabla en INNER JOINUsing OPENROWSET and another table in an INNER JOIN

En el siguiente ejemplo se seleccionan todos los datos de la tabla Customers de la instancia local de la base de datos Northwind de SQL ServerSQL Server y de la tabla Orders de la base de datos Northwind de Access que se encuentra en el mismo equipo.The following example selects all data from the Customers table from the local instance of SQL ServerSQL Server Northwind database and from the Orders table from the Access Northwind database stored on the same computer.

Nota

En este ejemplo se supone que está instalado Access.This example assumes that Access is installed. Para ejecutar este ejemplo, debe instalar la base de datos Northwind.To run this example, you must install the Northwind database.

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 ;  
GO  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

D.D. Usar OPENROWSET para insertar de forma masiva datos de archivo en una columna varbinary(max)Using OPENROWSET to bulk insert file data into a varbinary(max) column

En el ejemplo siguiente se crea una tabla pequeña como ejemplo y se insertan datos de archivo desde un archivo llamado Text1.txt ubicado en el directorio raíz C: en una columna varbinary(max).The following example creates a small table for demonstration purposes, and inserts file data from a file named Text1.txt located in the C: root directory into a varbinary(max) column.

USE AdventureWorks2012;  
GO  
CREATE TABLE myTable(FileName nvarchar(60),   
  FileType nvarchar(60), Document varbinary(max));  
GO  
  
INSERT INTO myTable(FileName, FileType, Document)   
   SELECT 'Text1.txt' AS FileName,   
      '.txt' AS FileType,   
      * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;  
GO  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

E.E. Usar el proveedor OPENROWSET BULK con un archivo de formato para recuperar filas de un archivo de textoUsing the OPENROWSET BULK provider with a format file to retrieve rows from a text file

En el ejemplo siguiente se utiliza un archivo de formato para recuperar filas de un archivo de texto delimitado por tabuladores, values.txt, que contiene los datos siguientes:The following example uses a format file to retrieve rows from a tab-delimited text file, values.txt that contains the following data:

1     Data Item 1  
2     Data Item 2  
3     Data Item 3  

El archivo de formato, values.fmt, describe las columnas en values.txt:The format file, values.fmt, describes the columns in values.txt:

9.0  
2  
1  SQLCHAR  0  10 "\t"        1  ID                SQL_Latin1_General_Cp437_BIN  
2  SQLCHAR  0  40 "\r\n"      2  Description        SQL_Latin1_General_Cp437_BIN  

Ésta es la consulta que recupera los datos:This is the query that retrieves that data:

SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',   
   FORMATFILE = 'c:\test\values.fmt') AS a;  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

F.F. Especificar un archivo de formato y una página de códigosSpecifying a format file and code page

En el siguiente ejemplo se muestra cómo usar las opciones de archivo de formato y página de códigos al mismo tiempo.The following example show how to use both the format file and code page options at the same time.

INSERT INTO MyTable SELECT a.* FROM  
OPENROWSET (BULK N'D:\data.csv', FORMATFILE =   
    'D:\format_no_collation.txt', CODEPAGE = '65001') AS a;  

G.G. Tener acceso a los datos de un archivo CSV con un archivo de formatoAccessing data from a CSV file with a format file

Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt', 
    FIRSTROW=2, 
    FORMAT='CSV') AS cars;  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

H.H. Tener acceso a los datos de un archivo CSV sin un archivo de formatoAccessing data from a CSV file without a format file

SELECT * FROM OPENROWSET(
   BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB) AS DATA;

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

I.I. Tener acceso a los datos de un archivo almacenado en Azure Blob StorageAccessing data from a file stored on Azure Blob storage

Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
En el siguiente ejemplo se usa un origen de datos externo que apunta a un contenedor en una cuenta de Azure Storage y una credencial con ámbito de base de datos creada para una firma de acceso compartido.The following example uses an external data source that points to a container in an Azure storage account and a database scoped credential created for a shared access signature.

SELECT * FROM OPENROWSET(
   BULK  'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   SINGLE_CLOB) AS DataFile;

Para ver ejemplos completos de OPENROWSET, incluido cómo configurar la credencial y el origen de datos externo, vea Ejemplos de acceso masivo a datos en Azure Blob Storage.For complete OPENROWSET examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Otros ejemplosAdditional Examples

Para obtener más ejemplos del uso de INSERT...SELECT * FROM OPENROWSET(BULK...), vea los siguientes temas:For additional examples that show using INSERT...SELECT * FROM OPENROWSET(BULK...), see the following topics:

Consulte tambiénSee Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
Importar y exportar datos en bloque (SQL Server) Bulk Import and Export of Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENDATASOURCE (Transact-SQL) OPENDATASOURCE (Transact-SQL)
OPENQUERY (Transact-SQL) OPENQUERY (Transact-SQL)
Rowset Functions (Transact-SQL) Rowset Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL) sp_serveroption (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)