Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
OPENROWSET é uma alternativa para acessar tabelas em um servidor vinculado e é um método ad hoc único de conexão e acesso a dados remotos. Um OPENROWSET comando T-SQL inclui todas as informações de conexão necessárias para acessar dados remotos de uma fonte de dados externa.
A OPENROWSET função pode ser referenciada FROM na cláusula de uma consulta como se fosse um nome de tabela. A OPENROWSET função também pode ser referenciada como a tabela de destino de uma instruçãoINSERT, ou UPDATE , DELETEsujeita aos recursos do provedor de dados. Embora a consulta possa retornar vários conjuntos de resultados, OPENROWSET retorna somente o primeiro deles.
Tip
Para referências mais frequentes a fontes de dados externas, use servidores vinculados. Para obter mais informações, confira Servidores vinculados (Mecanismo de Banco de Dados).
OPENROWSET sem o BULK operador está disponível somente no SQL Server. Detalhes e links para exemplos semelhantes em outras plataformas:
-
OPENROWSETdá suporte a operações em massa por meio de um provedor interno emBULKmuitas plataformas do Mecanismo de Banco de Dados, incluindo SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e Microsoft Fabric Data Warehouse. Para obter mais informações, consulte OPENROWSET BULK (Transact-SQL).- Para obter exemplos no Banco de Dados SQL do Azure, consulte Virtualização de dados com o Banco de Dados SQL do Azure.
- Para obter exemplos na Instância Gerenciada de SQL do Azure, consulte Virtualização de dados com a Instância Gerenciada de SQL do Azure.
- Para obter informações e exemplos com pools de SQL sem servidor no Azure Synapse, consulte Como usar OPENROWSET usando o pool de SQL sem servidor no Azure Synapse Analytics. Os pools de SQL dedicados no Azure Synapse não dão suporte à
OPENROWSETfunção.
Convenções de sintaxe de Transact-SQL
Syntax
OPENROWSET A sintaxe é usada para consultar fontes de dados externas:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Arguments
'provider_name'
Uma cadeia de caracteres que representa o nome amigável (ou PROGID) do provedor de dados, conforme especificado no registro.
provider_name não tem valor padrão. Os exemplos de nome do provedor são MSOLEDBSQL, Microsoft.Jet.OLEDB.4.0 ou MSDASQL.
'datasource'
Uma constante de cadeia de caracteres que corresponde a uma fonte de dados específica.
datasource é a DBPROP_INIT_DATASOURCE propriedade a ser passada para a IDBProperties interface do provedor para inicializar o provedor. 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 entende para localizar o banco de dados ou bancos de dados.
A fonte de dados pode ser um caminho de arquivo C:\SAMPLES\Northwind.mdb' para o provedor Microsoft.Jet.OLEDB.4.0 ou a cadeia de conexão Server=Seattle1;Trusted_Connection=yes; para o provedor MSOLEDBSQL.
'user_id'
Uma constante de cadeia de caracteres que é o nome de usuário passado para o provedor de dados especificado.
user_id especifica o contexto de segurança para a conexão e é passado como a DBPROP_AUTH_USERID propriedade para inicializar o provedor.
user_id não pode ser um nome de logon do Microsoft Windows.
'password'
Uma constante de cadeia de caracteres que é a senha do usuário a ser passada para o provedor de dados.
password é passada como a DBPROP_AUTH_PASSWORD propriedade ao inicializar o provedor.
password não pode ser uma senha do Microsoft Windows. Por exemplo:
SELECT a.* FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\SAMPLES\Northwind.mdb';
'<user name>';
'<password>',
Customers
) AS a;
'provider_string'
Uma cadeia de conexão específica do provedor que é passada como a DBPROP_INIT_PROVIDERSTRING propriedade para inicializar o provedor OLE DB.
provider_string encapsula normalmente todas as informações de conexão necessárias para inicializar o provedor.
Para obter uma lista de palavras-chave que o provedor OLE DB do SQL Server Native Client reconhece, consulte Propriedades de inicialização e autorização (provedor OLE DB do cliente nativo). O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O provedor OLE DB do SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) no futuro.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ catálogo. ] [ esquema. ] objeto
Tabela ou exibição remota que contém os dados que OPENROWSET deve ler. Pode ser um objeto de nome com três partes com os seguintes componentes:
- catalog (opcional) – o nome do catálogo ou do banco de dados no qual reside o objeto especificado.
- schema (opcional) – o nome do esquema ou do proprietário de objeto do objeto especificado.
- object – o nome de objeto que identifica com exclusividade o objeto com o qual trabalhar.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
'query'
Uma constante de cadeia de caracteres enviada e executada pelo provedor. A instância local do SQL Server não processa essa consulta, mas processa os resultados da consulta retornados pelo provedor, uma consulta de passagem. As consultas de passagem são úteis quando usadas em provedores que não disponibilizam seus dados tabulares por meio de nomes de tabela, mas apenas por meio de uma linguagem de comando. 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.
Para obter mais informações, consulte Interfaces do SQL Server Native Client (OLE DB).
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
'SELECT TOP 10 GroupName, Name FROM AdventureWorks2022.HumanResources.Department'
) AS a;
Remarks
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. Quando essas opções não estão definidas, o comportamento padrão não permite acesso ad hoc.
Quando você acessa fontes de dados OLE DB remotas, a identidade de logon de conexões confiáveis não é delegada automaticamente do servidor no qual o cliente está conectado ao servidor que está sendo consultado. A delegação de autenticação deve ser configurada.
Os nomes de catálogo e esquema serão necessários se o provedor de dados der suporte a vários catálogos e esquemas na fonte de dados especificada. Valores para catalog e schema podem ser omitidos quando o provedor de dados não dá suporte a eles. Se o provedor der suporte apenas a nomes de esquema, um nome de duas partes do formulário schema.object deverá ser especificado. Se o provedor der suporte apenas a nomes de catálogo, um nome de três partes do formulário catalog.schema.object deverá ser especificado. Para obter mais informações, confira Convenções da sintaxe Transact-SQL.
Nomes de três partes são necessários para consultas de passagem que usam o provedor OLE DB do SQL Server Native Client.
OPENROWSET não aceita variáveis para seus argumentos.
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. Em particular, as condições de filtro ou junção aplicadas no resultado de uma dessas chamadas não têm efeito sobre os resultados da outra.
Permissions
OPENROWSET as permissões são determinadas pelas permissões do nome de usuário que está sendo passado para o provedor de dados.
Limitations
Não há suporte para o driver do Mecanismo de Banco de Dados do Microsoft Access.
Examples
Esta seção fornece exemplos gerais para demonstrar como usar OPENROWSET.
Note
Para obter exemplos que mostram como usar INSERT...SELECT * FROM OPENROWSET(BULK...), consulte OPENROWSET BULK (Transact-SQL).
O SQL Server Native Client (geralmente abreviado como SNAC) foi removido do SQL Server 2022 (16.x) e do SSMS (SQL Server Management Studio) 19. O provedor OLE DB do SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Provedor OLE DB herdado da Microsoft para o SQL Server (SQLOLEDB) não são recomendados para um novo desenvolvimento. Alterne para o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL) no futuro.
A. Usar OPENROWSET com SELECT e o provedor OLE DB do SQL Server Native Client
O exemplo a seguir usa o Provedor OLE DB do SQL Server Native Client para acessar a tabela HumanResources.Department do banco de dados AdventureWorks2025 no servidor remoto Seattle1. (Use MSOLEDBSQL para o provedor de dados OLE DB do Microsoft SQL Server moderno que substituiu SQLNCLI.) Uma SELECT instrução é usada para definir o conjunto de linhas retornado. A cadeia de caracteres de provedor contém as palavras-chave Server e Trusted_Connection. Essas palavras-chave são reconhecidas pelo Provedor OLE DB do SQL Server Native Client.
SELECT a.*
FROM OPENROWSET(
'MSOLEDBSQL', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2022.HumanResources.Department
ORDER BY GroupName, Name'
) AS a;
B. Usar o Microsoft OLE DB Provider for Jet
O exemplo a seguir acessa a tabela Customers no banco de dados Microsoft Access Northwind via Microsoft OLE DB Provider for Jet.
Note
Este exemplo pressupõe que o Microsoft Access esteja instalado. Para executar este exemplo, você deve instalar o Northwind banco de dados.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
C. Usar OPENROWSET e outra tabela em um INNER JOIN
O exemplo a seguir seleciona todos os dados da Customers tabela na instância local do banco de dados do SQL Server Northwind e na Orders tabela do banco de dados do Microsoft Access Northwind armazenado no mesmo computador.
Note
Este exemplo pressupõe que o Microsoft Access esteja instalado. Para executar este exemplo, você deve instalar o Northwind banco de dados.
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;