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

APLICA-SE A: simSQL Server (a partir do 2008) simBanco de Dados SQL do Azure (somente Instância Gerenciada) nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database (Managed Instance only) noAzure SQL Data Warehouse noParallel Data Warehouse

Inclui todas as informações de conexão exigidas para acessar dados remotos de uma fonte de dados OLE DB.Includes all connection information that is required to access remote data from an OLE DB data source. Este método é uma alternativa para acessar tabelas em um servidor vinculado e se trata de um método de uso único e ad hoc para conexão e acesso a dados remotos por meio de 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 mais referências frequentes a fontes de dados OLE DB, use servidores vinculados.For more frequent references to OLE DB data sources, use linked servers instead. Para obter mais informações, veja Servidores vinculados (Mecanismo de Banco de Dados).For more information, see Linked Servers (Database Engine). A função OPENROWSET pode ser referenciada na cláusula FROM de uma consulta como se fosse um nome de tabela.The OPENROWSET function can be referenced in the FROM clause of a query as if it were a table name. A função OPENROWSET também pode ser referenciada como a tabela de destino de uma instrução INSERT, UPDATE ou DELETE, sujeito às funcionalidades do Provedor 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. Embora a consulta possa retornar vários conjuntos de resultados, OPENROWSET retorna somente o primeiro deles.Although the query might return multiple result sets, OPENROWSET returns only the first one.

OPENROWSET também é compatível com a operações em massa por meio de um provedor BULK interno que permite que dados de um arquivo sejam lidos e retornados como um conjunto de linhas.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.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

  
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'
É uma cadeia de caracteres que representa o nome amigável (ou PROGID) do provedor OLE DB conforme especificado no registro.Is a character string that represents the friendly name (or PROGID) of the OLE DB provider as specified in the registry. provider_name não tem valor padrão.provider_name has no default value.

'datasource''datasource'
Uma constante de cadeia de caracteres que corresponder a uma fonte de dados OLE DB específica.Is a string constant that corresponds to a particular OLE DB data source. datasource é a propriedade DBPROP_INIT_DATASOURCE a ser passada para a interface IDBProperties do provedor para inicializar o provedor.datasource is the DBPROP_INIT_DATASOURCE property to be passed to the IDBProperties interface of the provider to initialize the provider. Normalmente, essa cadeia de caracteres inclui o nome do arquivo de banco de dados, o nome de um servidor de banco de dados ou um nome que o provedor entenda para localizar o banco de dados (ou bancos de dados).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'
É uma constante de cadeia de caracteres que é o nome de usuário passado para o provedor OLE DB especificado.Is a string constant that is the user name passed to the specified OLE DB provider. user_id especifica o contexto de segurança para a conexão e é passado como a propriedade DBPROP_AUTH_USERID para inicializar o provedor.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 não pode ser um nome de logon do Microsoft Windows.user_id cannot be a Microsoft Windows login name.

'password''password'
É uma constante de cadeia de caracteres que é a senha de usuário a ser passada para o provedor OLE DB.Is a string constant that is the user password to be passed to the OLE DB provider. password é passada pela propriedade DBPROP_AUTH_PASSWORD ao inicializar o provedor.password is passed in as the DBPROP_AUTH_PASSWORD property when initializing the provider. password não pode ser uma senha do Microsoft Windows.password cannot be a Microsoft Windows password.

'provider_string''provider_string'
É uma cadeia de conexão específica ao provedor, que é passada na propriedade DBPROP_INIT_PROVIDERSTRING para inicializar o provedor OLE DB.Is a provider-specific connection string that is passed in as the DBPROP_INIT_PROVIDERSTRING property to initialize the OLE DB provider. provider_string encapsula normalmente todas as informações de conexão necessárias para inicializar o provedor.provider_string typically encapsulates all the connection information required to initialize the provider. Para obter uma lista de palavras-chave reconhecidas pelo Provedor OLE DB do SQL ServerSQL Server Native Client, consulte Propriedades de inicialização e autorização.For a list of keywords that are recognized by the SQL ServerSQL Server Native Client OLE DB provider, see Initialization and Authorization Properties.

catalogcatalog
É o nome do catálogo ou do banco de dados no qual reside o objeto especificado.Is the name of the catalog or database in which the specified object resides.

schemaschema
É o nome do esquema ou do proprietário de objeto do objeto especificado.Is the name of the schema or object owner for the specified object.

objectobject
É o nome de objeto que identifica com exclusividade o objeto com o qual trabalhar.Is the object name that uniquely identifies the object to work with.

'query''query'
É uma constante de cadeia de caracteres enviada ao provedor e executada por ele.Is a string constant sent to and executed by the provider. A instância local do SQL ServerSQL Server não processa esta consulta, mas processa resultados de consulta retornados pelo provedor, uma consulta de passagem.The local instance of SQL ServerSQL Server does not process this query, but processes query results returned by the provider, a pass-through query. Consultas de passagem são úteis quando usadas em provedores que não tornam disponíveis seus dados tabulares por meio de nomes de tabelas, mas somente via linguagem de comando.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. Há compatibilidade com consultas de passagem no servidor remoto, desde que o provedor de consulta dê suporte ao objeto Command do OLE DB e a suas interfaces obrigatórias.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 obter mais informações, consulte Referência do SQL Server Native Client (OLE DB).For more information, see SQL Server Native Client (OLE DB) Reference.

BULKBULK
Usa o provedor de conjuntos de linhas BULK para que OPENROWSET leia dados de um arquivo.Uses the BULK rowset provider for OPENROWSET to read data from a file. No SQL ServerSQL Server, OPENROWSET pode ler de um arquivo de dados sem carregar os dados em uma tabela de destino.In SQL ServerSQL Server, OPENROWSET can read from a data file without loading the data into a target table. Permite que você use OPENROWSET com uma instrução SELECT simples.This lets you use OPENROWSET with a simple SELECT statement.

Importante

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

Os argumentos da opção BULK permitem um controle significativo sobre os pontos de início e término da leitura de dados, o modo de manipulação dos erros e o modo de interpretação dos dados.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 exemplo, você pode especificar que o arquivo de dados seja lido como uma única linha, um conjunto de linhas de coluna única do tipo varbinary, varchar ou 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. O comportamento padrão é descrito nas descrições de argumento que se seguem.The default behavior is described in the argument descriptions that follow.

Para obter informações sobre como usar a opção BULK, consulte "Comentários", mais adiante neste tópico.For information about how to use the BULK option, see "Remarks," later in this topic. Para obter informações sobre as permissões exigidas pela opção BULK, consulte "Permissões" mais adiante, neste tópico.For information about the permissions that are required by the BULK option, see "Permissions," later in this topic.

Observação

Quando usado para importar dados com o modelo de recuperação completa, OPENROWSET (BULK...) não otimiza o registro.When used to import data with the full recovery model, OPENROWSET (BULK ...) does not optimize logging.

Para obter informações sobre como preparar dados para importação em massa, consulte Preparar dados para exportação ou importação em massa (SQL Server).For information on preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

'data_file''data_file'
É o caminho completo do arquivo de dados cujos dados serão copiados para a tabela de destino.Is the full path of the data file whose data is to be copied into the target table.
Aplica-se 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 do SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, o data_file pode estar localizado no Armazenamento de Blobs do Azure.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 obter exemplos, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

Importante

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

<bulk_options><bulk_options>
Especifica um ou mais argumentos para a opção BULK.Specifies one or more arguments for the BULK option.

CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }CODEPAGE = { 'ACP'| 'OEM'| 'RAW'| 'code_page' }
Especifica a página de código dos dados no arquivo de dados.Specifies the code page of the data in the data file. CODEPAGE apenas será relevante se os dados contiverem colunas char, varchar ou text com valores de caractere maiores que 127 ou 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 não é uma opção compatível com o Linux.CODEPAGE is not a supported option on Linux.

Observação

Recomendamos a especificação de um nome de ordenação para cada coluna em um arquivo de formato, exceto quando você desejar que a opção 65001 tenha prioridade sobre a especificação de ordenação/página de código.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 DescriçãoDescription
ACPACP Converte colunas do tipo de dados char, varchar ou text da página de código do ANSI/MicrosoftMicrosoft Windows (ISO 1252) na página de código do 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 (padrão)OEM (default) Converte colunas do tipo de dados char, varchar ou text da página de código de OEM do sistema na página de código do 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 Não ocorre nenhuma conversão de uma página de código em outra.No conversion occurs from one code page to another. Esta é a opção mais rápida.This is the fastest option.
code_pagecode_page Indica a página de código de origem na qual são codificados os dados de caracteres do arquivo de dados; por exemplo, 850.Indicates the source code page on which the character data in the data file is encoded; for example, 850.

** Importante ** As versões anteriores à SQL Server 2016 (13.x)SQL Server 2016 (13.x) não são compatíveis com a página de código 65001 (codificação 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 o arquivo usado para coletar linhas com erros de formatação e que não podem ser convertidas em um conjunto de linhas OLE DB.Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Essas linhas são copiadas do arquivo de dados para esse arquivo de erro "no estado em que se encontram".These rows are copied into this error file from the data file "as is."

O arquivo de erro é criado no início da execução do comando.The error file is created at the start of the command execution. Um erro será gerado se o arquivo já existir.An error will be raised if the file already exists. Além disso, é criado um arquivo de controle com a extensão .ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. Esse arquivo faz referência a cada linha do arquivo de erro e fornece um diagnóstico dos erros.This file references each row in the error file and provides error diagnostics. Corrigidos os erros, os dados podem ser carregados.After the errors have been corrected, the data can be loaded.
Aplica-se 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. Começando pelo SQL Server 2017 (14.x)SQL Server 2017 (14.x), o error_file_path pode estar no Armazenamento de Blobs do Azure.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'
Aplica-se 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. É uma fonte de dados externa nomeada que aponta para o local de Armazenamento de Blobs do Azure do arquivo de erro que conterá os erros encontrados durante a importação.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. A fonte de dados externa deve ser criada usando a opção TYPE = BLOB_STORAGE adicionada no 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 obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW =first_rowFIRSTROW =first_row
Especifica o número da primeira linha a carregar.Specifies the number of the first row to load. O padrão é 1.The default is 1. Indica a primeira linha no arquivo de dados especificado.This indicates the first row in the specified data file. Os números de linhas são determinados pela contagem dos terminadores de linha.The row numbers are determined by counting the row terminators. FIRSTROW tem base 1.FIRSTROW is 1-based.

LASTROW =last_rowLASTROW =last_row
Especifica o número da última linha a ser carregada.Specifies the number of the last row to load. O padrão é 0.The default is 0. Indica a última linha no arquivo de dados especificado.This indicates the last row in the specified data file.

MAXERRORS =maximum_errorsMAXERRORS =maximum_errors
Especifica o número máximo de erros de sintaxe ou de linhas fora de conformidade, conforme definido no arquivo de formato, que podem ocorrer antes de OPENROWSET lançar uma exceção.Specifies the maximum number of syntax errors or nonconforming rows, as defined in the format file, that can occur before OPENROWSET throws an exception. Até que MAXERRORS seja atingido, OPENROWSET ignora as linhas inválidas, deixando de carregá-las, e as conta como erros.Until MAXERRORS is reached, OPENROWSET ignores each bad row, not loading it, and counts the bad row as one error.

O padrão de maximum_errors é 10.The default for maximum_errors is 10.

Observação

MAX_ERRORS não se aplica a restrições CHECK ou à conversão dos tipos de dados money e 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 o número aproximado de linhas de dados no arquivo de dados.Specifies the approximate number of rows of data in the data file. Este valor deve ser da mesma ordem que o número real de linhas.This value should be of the same order as the actual number of rows.

OPENROWSET sempre importa um arquivo de dados como um único lote.OPENROWSET always imports a data file as a single batch. No entanto, se você especificar rows_per_batch com um valor > 0, o processador de consulta usará o valor de rows_per_batch como dica para alocar recursos no plano 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.

Por padrão, ROWS_PER_BATCH é desconhecido.By default, ROWS_PER_BATCH is unknown. Especificar ROWS_PER_BATCH = 0 é o mesmo 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 ] )
Uma dica opcional que especifica como os dados são classificados no arquivo de dados.An optional hint that specifies how the data in the data file is sorted. Por padrão, a operação em massa presume que o arquivo de dados não está ordenado.By default, the bulk operation assumes the data file is unordered. O desempenho poderá melhorar se a ordem especificada puder ser explorada pelo otimizador de consulta para gerar um plano de consulta mais eficiente.Performance might improve if the order specified can be exploited by the query optimizer to generate a more efficient query plan. São exemplos de quando especificar uma classificação pode ser benéfico:Examples for when specifying a sort can be beneficial include the following:

  • Ao inserir linhas em uma tabela que tem um índice clusterizado, na qual os dados dos conjuntos de linhas são classificados na chave do índice clusterizado.Inserting rows into a table that has a clustered index, where the rowset data is sorted on the clustered index key.

  • Ao unir o conjunto de linhas com outra tabela, cujas colunas de classificação e de união correspondam.Joining the rowset with another table, where the sort and join columns match.

  • Ao agregar os dados dos conjuntos de linhas pelas colunas de classificação.Aggregating the rowset data by the sort columns.

  • Ao usar o conjunto de linhas como tabela de origem na cláusula FROM de uma consulta, cujas colunas de classificação e de junção correspondam.Using the rowset as a source table in the FROM clause of a query, where the sort and join columns match.

UNIQUE especifica que o arquivo de dados não tem entradas duplicadas.UNIQUE specifies that the data file does not have duplicate entries.

Se as linhas reais do arquivo de dados não estiverem classificadas na ordem especificada, ou se a dica UNIQUE tiver sido especificada e houver chaves duplicadas, será retornado um erro.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.

Aliases de coluna são necessários quando se usa ORDER.Column aliases are required when ORDER is used. A lista de aliases de coluna deve referenciar a tabela derivada que está sendo acessada pela cláusula BULK.The column alias list must reference the derived table that is being accessed by the BULK clause. Os nomes de coluna especificados na cláusula ORDER se referem a essa lista de aliases de coluna.The column names that are specified in the ORDER clause refer to this column alias list. Tipos de valor grande (varchar(max), nvarchar(max), varbinary(max) e xml) e colunas de tipos LOB (objeto grande) (text, ntext e image) não podem ser especificados.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
Retorna o conteúdo de data_file como um conjunto de linhas de linha e coluna únicas do tipo varbinary(max).Returns the contents of data_file as a single-row, single-column rowset of type varbinary(max).

Importante

Recomendamos importar apenas os dados XML que usam a opção SINGLE_BLOB, em vez de SINGLE_CLOB e SINGLE_NCLOB, porque só SINGLE_BLOB oferece suporte a todas as conversões de codificação do 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
A leitura de data_file como ASCII retorna o conteúdo como um conjunto de linhas de linha e coluna únicas do tipo varchar(max), usando a ordenação do banco de dados atual.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
A leitura de data_file como UNICODE retorna o conteúdo como um conjunto de linhas de linha e coluna únicas do tipo nvarchar(max), usando a ordenação do banco de dados atual.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.

Opções de formato de arquivo de entradaInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
Aplica-se 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 um arquivo de valores separados por vírgula em conformidade com o padrão RFC 4180.Specifies a comma separated values file compliant to the RFC 4180 standard.

FORMATFILE ='format_file_path'FORMATFILE ='format_file_path'
Especifica o caminho completo de um arquivo de formato.Specifies the full path of a format file. SQL ServerSQL Server dá suporte a dois tipos de arquivos de formato: XML e não XML.supports two types of format files: XML and non-XML.

É necessário um arquivo de formato para definir tipos de coluna no conjunto de resultados.A format file is required to define column types in the result set. A única exceção é quando SINGLE_CLOB, SINGLE_BLOB ou SINGLE_NCLOB é especificado; nesses casos, o arquivo de formato não é obrigatório.The only exception is when SINGLE_CLOB, SINGLE_BLOB, or SINGLE_NCLOB is specified; in which case, the format file is not required.

Para obter informações sobre arquivos de formato, consulte Usar um arquivo de formato para importar dados em massa (SQL Server).For information about format files, see Use a Format File to Bulk Import Data (SQL Server).

Aplica-se 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.
Começando com o SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, o format_file_path pode estar localizado no Armazenamento de Blobs do Azure.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 obter exemplos, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.For examples, see Examples of Bulk Access to Data in Azure Blob Storage.

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
Aplica-se 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 um caractere que será usado como o caractere de aspas no arquivo CSV.Specifies a character that will be used as the quote character in the CSV file. Se não for especificado, o caractere de aspas (") será usado como o caractere de aspas, conforme definido no padrão RFC 4180.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

RemarksRemarks

OPENROWSET pode ser usado para acessar dados remotos de fontes de dados OLE DB somente quando a opção do Registro DisallowAdhocAccess está definida explicitamente como 0 para o provedor especificado, e a opção de configuração avançada Consultas Distribuídas Ad Hoc 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. Quando essas opções não estão definidas, o comportamento padrão não permite acesso ad hoc.When these options are not set, the default behavior does not allow for ad hoc access.

No acesso a fontes de dados OLE DB remotas, a identidade de logon das conexões confiáveis não são delegadas automaticamente do servidor no qual o cliente é conectado ao servidor que está sendo consultado.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. A delegação de autenticação deve ser configurada.Authentication delegation must be configured.

Serão necessários os nomes de catálogo e de esquema, se o provedor OLE DB oferecer suporte a vários catálogos e esquemas na fonte de dados especificada.Catalog and schema names are required if the OLE DB provider supports multiple catalogs and schemas in the specified data source. Os valores de catalog e )schema poderão ser omitidos quando o provedor OLE DB não for compatível com eles.Values for catalog and )schema can be omitted when the OLE DB provider does not support them. Se o provedor for compatível apenas com nomes de esquema, um nome de duas partes no formato schema.object deverá ser especificado.If the provider supports only schema names, a two-part name of the form schema.object must be specified. Se o provedor for compatível apenas com nomes de catálogo, um nome de três partes no formato catalog.schema.object deverá ser especificado.If the provider supports only catalog names, a three-part name of the form catalog.schema.object must be specified. Devem ser especificados nomes de três partes para consultas de passagem que usam o Provedor OLE DB do 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 obter mais informações, consulte Convenções da sintaxe Transact-SQL (Transact-SQL).For more information, see Transact-SQL Syntax Conventions (Transact-SQL).

OPENROWSET não aceita variáveis para seus argumentos.OPENROWSET does not accept variables for its arguments.

Qualquer chamada a OPENDATASOURCE, OPENQUERY ou OPENROWSET na cláusula FROM é avaliada separada e independentemente de qualquer chamada a essas funções usadas como o destino da atualização, mesmo se argumentos idênticos forem fornecidos às duas chamadas.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. Em particular, as condições de filtro ou junção aplicadas no resultado de uma dessas chamadas não têm efeito sobre os resultado da outra.In particular, filter or join conditions applied on the result of one of those calls have no effect on the results of the other.

Usando OPENROWSET com a opção BULKUsing OPENROWSET with the BULK Option

Os seguintes aperfeiçoamentos de Transact-SQLTransact-SQL oferecem suporte à função OPENROWSET(BULK...):The following Transact-SQLTransact-SQL enhancements support the OPENROWSET(BULK...) function:

  • Uma cláusula FROM que é usada com SELECT pode chamar OPENROWSET(BULK...) em vez de um nome de tabela, com funcionalidade completa de SELECT.A FROM clause that is used with SELECT can call OPENROWSET(BULK...) instead of a table name, with full SELECT functionality.

    OPENROWSET com a opção BULK exige um nome de correlação, também conhecido como variável ou alias de intervalo, na cláusula FROM.OPENROWSET with the BULK option requires a correlation name, also known as a range variable or alias, in the FROM clause. Podem ser especificados aliases de coluna.Column aliases can be specified. Se uma lista de aliases de coluna não for especificada, o arquivo de formato deverá ter nomes de coluna.If a column alias list is not specified, the format file must have column names. Especificar aliases de coluna faz com que os nomes de coluna sejam substituídos no arquivo de formato; por exemplo: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

A falha ao adicionar o AS <table_alias> resultará no erro:Failure to add the AS <table_alias> will result in the error:
Mensagem 491, Nível 16, Estado 1, Linha 20Msg 491, Level 16, State 1, Line 20
Um nome de correlação deve ser especificado para o conjunto de linhas em massa na cláusula from.A correlation name must be specified for the bulk rowset in the from clause.

  • Uma instrução SELECT...FROM OPENROWSET(BULK...) consulta diretamente os dados em um arquivo, sem importá-los para uma tabela.A SELECT...FROM OPENROWSET(BULK...) statement queries the data in a file directly, without importing the data into a table. As instruções SELECT...FROM OPENROWSET(BULK...) também podem listar aliases de colunas em massa, usando um formato de arquivo para especificar nomes de coluna, além de tipos de dados.SELECT...FROM OPENROWSET(BULK...) statements can also list bulk-column aliases by using a format file to specify column names, and also data types.

  • O uso de OPENROWSET(BULK...) como uma tabela de origem em uma instrução INSERT ou MERGE importa dados em massa de um arquivo de dados para uma tabela do 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 obter mais informações, consulte Importar dados em massa usando BULK INSERT ou OPENROWSET(BULK...) (SQL Server).For more information, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server) .

  • Quando a opção OPENROWSET BULK for usada com uma instrução INSERT, a cláusula BULK será compatível com dicas de tabela.When the OPENROWSET BULK option is used with an INSERT statement, the BULK clause supports table hints. Além de dicas de tabela normais, como TABLOCK, a cláusula BULK pode aceitar as seguintes dicas de tabela especializadas: IGNORE_CONSTRAINTS (ignora somente as restrições CHECK e FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTS e 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 obter mais informações, consulte Dicas de tabela (Transact-SQL).For more information, see Table Hints (Transact-SQL).

Para obter informações sobre como usar instruções INSERT...SELECT * FROM OPENROWSET(BULK...), consulte Importação e exportação em massa de dados (SQL Server).For information about how to use INSERT...SELECT * FROM OPENROWSET(BULK...) statements, see Bulk Import and Export of Data (SQL Server). Para obter informações sobre quando as operações de inserção de linhas executadas por importações em massa são registradas no log de transações, veja Pré-requisitos para log mínimo em importação em massa.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.

Observação

Ao usar OPENROWSET, é importante entender como o SQL ServerSQL Server cuida da representação.When you use OPENROWSET, it is important to understand how SQL ServerSQL Server handles impersonation. Para obter informações sobre considerações sobre segurança, consulte Importação em massa de dados usando BULK INSERT ou OPENROWSET(BULK...) (SQL Server).For information about security considerations, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

Importação em massa de dados SQLCHAR, SQLNCHAR ou SQLBINARYBulk Importing SQLCHAR, SQLNCHAR or SQLBINARY Data

OPENROWSET(BULK...) pressupõe que, se não especificado, o comprimento máximo de dados SQLCHAR, SQLNCHAR ou SQLBINARY não excede 8000 bytes.OPENROWSET(BULK...) assumes that, if not specified, the maximum length of SQLCHAR, SQLNCHAR or SQLBINARY data does not exceed 8000 bytes. Se os dados importados estiverem em um campo de dados LOB que contém objetos varchar(max), nvarchar(max) ou varbinary(max) que excedem 8.000 bytes, será necessário usar um arquivo de formato XML que define o tamanho máximo para o campo de dados.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 o comprimento máximo, edite o arquivo de formato e declare o atributo MAX_LENGTH.To specify the maximum length, edit the format file and declare the MAX_LENGTH attribute.

Observação

Um arquivo de formato gerado automaticamente não especifica o comprimento ou o comprimento máximo para um campo de LOB.An automatically generated format file does not specify the length or maximum length for a LOB field. No entanto, você pode editar um arquivo de formato e especificar o comprimento ou o comprimento máximo manualmente.However, you can edit a format file and specify the length or maximum length manually.

Exportando ou importando documentos SQLXML em massaBulk Exporting or Importing SQLXML Documents

Para exportar ou importar dados SQLXML em massa, use um dos tipos de dados a seguir em seu arquivo de formato.To bulk export or import SQLXML data, use one of the following data types in your format file.

Tipo de dadosData type EfeitoEffect
SQLCHAR ou SQLVARYCHARSQLCHAR or SQLVARYCHAR Os dados são enviados na página de código do cliente ou na página de código implicada pela ordenação.The data is sent in the client code page or in the code page implied by the collation).
SQLNCHAR ou SQLNVARCHARSQLNCHAR or SQLNVARCHAR Os dados são enviados como Unicode.The data is sent as Unicode.
SQLBINARY ou SQLVARYBINSQLBINARY or SQLVARYBIN Os dados são enviados sem qualquer conversão.The data is sent without any conversion.

PermissõesPermissions

As permissões OPENROWSET são determinadas pelas permissões do nome de usuário que está sendo passado ao Provedor OLE DB.OPENROWSET permissions are determined by the permissions of the user name that is being passed to the OLE DB provider. Para usar a opção BULK, é necessário ter a permissão ADMINISTER BULK OPERATIONS.To use the BULK option requires ADMINISTER BULK OPERATIONS permission.

ExemplosExamples

A.A. Usando OPENROWSET com SELECT e o provedor OLE DB SQL Server Native ClientUsing OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider

O exemplo a seguir usa o Provedor OLE DB do SQL ServerSQL Server Native Client para acessar a tabela HumanResources.Department do banco de dados AdventureWorks2012AdventureWorks2012 no 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. (Use SQLNCLI, e o SQL ServerSQL Server fará o redirecionamento para a última versão do provedor OLE DB SQL ServerSQL Server Native Client.) Uma instrução SELECT é usada para definir o conjunto de linhas retornado.(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. A cadeia de caracteres de provedor contém as palavras-chave Server e Trusted_Connection.The provider string contains the Server and Trusted_Connection keywords. Essas palavras-chave são reconhecidas pelo Provedor OLE DB do SQL ServerSQL Server Native Client.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. Usando o Microsoft OLE DB Provider for JetUsing the Microsoft OLE DB Provider for Jet

O exemplo a seguir acessa a tabela Customers no banco de dados MicrosoftMicrosoft Access Northwind via MicrosoftMicrosoft OLE DB Provider for Jet.The following example accesses the Customers table in the MicrosoftMicrosoft Access Northwind database through the MicrosoftMicrosoft OLE DB Provider for Jet.

Observação

Este exemplo pressupõe que o Access esteja instalado.This example assumes that Access is installed. Para executar este exemplo, é necessário instalar o banco de dados 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

C.C. Usando OPENROWSET e outra tabela em um INNER JOINUsing OPENROWSET and another table in an INNER JOIN

O exemplo a seguir seleciona todos os dados da tabela Customers da instância local do banco de dados SQL ServerSQL Server Northwind e da tabela Orders do banco de dados Northwind do Access armazenado no mesmo computador.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.

Observação

Este exemplo pressupõe que o Access esteja instalado.This example assumes that Access is installed. Para executar este exemplo, é necessário instalar o banco de dados 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

D.D. Usando OPENROWSET para inserir dados de arquivo em massa em uma coluna varbinary(max)Using OPENROWSET to bulk insert file data into a varbinary(max) column

O exemplo a seguir cria uma pequena tabela a título de demonstração e insere dados de um arquivo denominado Text1.txt, localizado no diretório raiz C:, em uma coluna 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

E.E. Usando o provedor OPENROWSET BULK com um arquivo de formato para recuperar linhas de um arquivo de textoUsing the OPENROWSET BULK provider with a format file to retrieve rows from a text file

O exemplo a seguir usa um arquivo de formato para recuperar linhas de um arquivo de texto delimitado por tabulação, values.txt, que contém os seguintes dados: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  

O arquivo de formato values.fmt descreve as colunas em 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  

Eis a consulta que recupera esses dados: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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

F.F. Especificando um arquivo de formato e uma página de códigoSpecifying a format file and code page

O exemplo a seguir mostra como usar as opções de arquivo de formato e página de código ao mesmo tempo.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. Acessando dados de um arquivo CSV com um arquivo de formatoAccessing data from a CSV file with a format file

Aplica-se 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

H.H. Acessando dados de um arquivo CSV sem um arquivo 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

I.I. Acessando dados de um arquivo armazenado no Armazenamento de Blobs do AzureAccessing data from a file stored on Azure Blob storage

Aplica-se 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.
O exemplo a seguir usa uma fonte de dados externa que aponta para um contêiner em uma conta de armazenamento do Azure e uma credencial no escopo do banco de dados criada para uma Assinatura de Acesso Compartilhado.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 obter exemplos de OPENROWSET completos, incluindo a configuração da credencial e da fonte de dados externa, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.For complete OPENROWSET examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Exemplos adicionaisAdditional Examples

Para obter outros exemplos que mostram como usar INSERT...SELECT * FROM OPENROWSET(BULK...), consulte os seguintes tópicos:For additional examples that show using INSERT...SELECT * FROM OPENROWSET(BULK...), see the following topics:

Consulte TambémSee Also

DELETE (Transact-SQL) DELETE (Transact-SQL)
FROM (Transact-SQL) FROM (Transact-SQL)
Importação e exportação em massa de dados (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)
Funções de conjunto de linhas (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)