Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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 único e ad hoc 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 função OPENROWSET
pode ser referenciada na cláusula FROM
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 INSERT
, UPDATE
ou DELETE
instrução, sujeita aos recursos do provedor de dados. Embora a consulta possa retornar vários conjuntos de resultados, OPENROWSET
retorna apenas o primeiro.
Sugestão
Para referências mais frequentes a fontes de dados externas, use servidores vinculados. Para obter mais informações, consulte Servidores vinculados (Mecanismo de Banco de Dados).
OPENROWSET
sem o BULK
operador está disponível apenas no SQL Server. Detalhes e links para exemplos semelhantes em outras plataformas:
-
OPENROWSET
dá suporte a operações em massa por meio de um provedor internoBULK
em muitas plataformas do Mecanismo de Banco de Dados, incluindo Azure e Microsoft Fabric. Para obter mais informações, consulte OPENROWSET BULK (Transact-SQL). - Para obter exemplos sobre a Instância Gerenciada SQL do Azure, consulte Consultar fontes de dados usando OPENROWSET.
- A Base de Dados SQL do Azure suporta apenas OPENROWSET BULK (Transact-SQL).
- Para obter informações e exemplos com pools SQL sem servidor no Azure Synapse, consulte Como usar OPENROWSET usando pool SQL sem servidor no Azure Synapse Analytics. Os pools SQL dedicados no Azure Synapse não dão suporte à função
OPENROWSET
.
Transact-SQL convenções de sintaxe
Sintaxe
OPENROWSET
sintaxe é usada para consultar fontes de dados externas:
OPENROWSET
( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }
, { [ catalog. ] [ schema. ] object | 'query' }
)
Argumentos
'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 nomes de provedores são MSOLEDBSQL
, Microsoft.Jet.OLEDB.4.0
ou MSDASQL
.
'fonte de dados'
Uma constante de cadeia de caracteres que corresponde a uma fonte de dados específica.
de fonte de dados é a propriedade DBPROP_INIT_DATASOURCE
a ser passada para a interface IDBProperties
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 C:\SAMPLES\Northwind.mdb'
de caminho de arquivo para Microsoft.Jet.OLEDB.4.0
provedor ou Server=Seattle1;Trusted_Connection=yes;
de cadeia de conexão para MSOLEDBSQL
provedor.
'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 propriedade DBPROP_AUTH_USERID
para inicializar o provedor.
user_id não pode ser um nome de login do Microsoft Windows.
'palavra-passe'
Uma constante de cadeia de caracteres que é a senha de usuário a ser passada para o provedor de dados.
de senha é passada como a propriedade DBPROP_AUTH_PASSWORD
ao inicializar o provedor.
senha 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 propriedade DBPROP_INIT_PROVIDERSTRING
para inicializar o provedor OLE DB.
provider_string normalmente encapsula 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 Native Client). O SQL Server Native Client (geralmente abreviado SNAC) foi removido do SQL Server 2022 (16.x) e do SQL Server Management Studio 19 (SSMS). O provedor OLE DB do SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o provedor Microsoft OLE DB herdado para SQL Server (SQLOLEDB) não são recomendados para novos desenvolvimentos. Alterne para o novo Microsoft OLE DB Driver (MSOLEDBSQL) para SQL Server no futuro.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
Department
) AS d;
[ catálogo. ] [ esquema. ] objeto
Tabela ou vista remota contendo os dados que OPENROWSET
deve ler. Pode ser um objeto de nome de três partes com os seguintes componentes:
- catálogo (opcional) - o nome do catálogo ou banco de dados no qual o objeto especificado reside.
- do esquema (opcional) - o nome do proprietário do esquema ou do objeto especificado.
- objeto - o nome do objeto que identifica exclusivamente o objeto com o qual trabalhar.
SELECT d.* FROM OPENROWSET(
'MSOLEDBSQL',
'Server=Seattle1;Trusted_Connection=yes;',
AdventureWorks2022.HumanResources.Department
) AS d;
'consulta'
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 tabelas, mas apenas por meio de uma linguagem de comando. As consultas de passagem são suportadas no servidor remoto, desde que o provedor de consulta ofereça suporte ao objeto Command OLE DB e 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;
Comentários
OPENROWSET
pode ser usado para acessar dados remotos de fontes de dados OLE DB somente quando a opção de registro DisallowAdhocAccess estiver explicitamente definida como 0 para o provedor especificado e a opção de configuração avançada Consultas Distribuídas Ad Hoc estiver habilitada. Quando essas opções não sã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 são necessários se o provedor de dados oferecer suporte a vários catálogos e esquemas na fonte de dados especificada. Os valores para catalog
e schema
podem ser omitidos quando o provedor de dados não oferece suporte a eles. Se o provedor oferecer suporte apenas a nomes de esquema, um nome de duas partes do formulário schema.object
deverá ser especificado. Se o provedor oferecer 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, consulte Transact-SQL convenções de sintaxe.
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 para OPENDATASOURCE
, OPENQUERY
ou OPENROWSET
na cláusula FROM
é avaliada separadamente e independentemente de qualquer chamada para essas funções usadas como destino da atualização, mesmo que argumentos idênticos sejam fornecidos para as duas chamadas. Em especial, as condições de filtragem ou de junção aplicadas ao resultado de uma dessas chamadas não têm incidência nos resultados da outra.
Permissões
OPENROWSET
As permissões são determinadas pelas permissões do nome de usuário que está sendo passado para o provedor de dados.
Exemplos
Esta seção fornece exemplos gerais para demonstrar como usar OPENROWSET.
Observação
Para obter exemplos que mostram o uso do INSERT...SELECT * FROM OPENROWSET(BULK...)
, consulte OPENROWSET BULK (Transact-SQL).
O SQL Server Native Client (geralmente abreviado SNAC) foi removido do SQL Server 2022 (16.x) e do SQL Server Management Studio 19 (SSMS). O provedor OLE DB do SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o provedor Microsoft OLE DB herdado para SQL Server (SQLOLEDB) não são recomendados para novos desenvolvimentos. Alterne para o novo Microsoft OLE DB Driver (MSOLEDBSQL) para SQL Server no futuro.
Um. Use 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
no banco de dados AdventureWorks2022
no servidor remoto Seattle1
. (Use MSOLEDBSQL
para o provedor de dados OLE DB moderno do Microsoft SQL Server que substituiu SQLNCLI
.) Uma SELECT
instrução é usada para definir o conjunto de linhas retornado. A cadeia de caracteres do 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 do Microsoft Access Northwind
por meio do Microsoft OLE DB Provider for Jet.
Observação
Este exemplo pressupõe que o Microsoft Access esteja instalado. Para executar este exemplo, você deve instalar o banco de dados Northwind
.
SELECT CustomerID, CompanyName
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',
Customers
);
C. Use OPENROWSET e outra tabela em um INNER JOIN
O exemplo a seguir seleciona todos os dados da Customers
tabela da instância local do banco de dados do SQL Server Northwind
e da Orders
tabela do banco de dados do Microsoft Access Northwind
armazenado no mesmo computador.
Observação
Este exemplo pressupõe que o Microsoft Access esteja instalado. Para executar este exemplo, você deve instalar o banco de dados Northwind
.
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;