OPENDATASOURCE (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
Fornece informações de conexão ad hoc como parte de um nome de objeto de quatro partes sem usar um nome de servidor vinculado.
Convenções de sintaxe de Transact-SQL
Sintaxe
OPENDATASOURCE ( 'provider_name', 'init_string' )
Argumentos
'provider_name'
É o nome registrado como PROGID do provedor OLE DB usado para acessar a fonte de dados. provider_name é um tipo de dados char sem nenhum valor padrão.
Importante
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.
'init_string'
É a cadeia de conexão passada à interface IDataInitialize do provedor de destino. A sintaxe de cadeia de caracteres de provedor é baseada em pares palavra-chave e valor separados por ponto e vírgula, como: 'palavra-chave1=valor ; palavra-chave2=valor'.
Para ver os pares de valor e palavra-chave específicos com suporte no provedor, consulte o SDK do Microsoft Data Access. Essa documentação define a sintaxe básica. A tabela a seguir lista as palavras-chave mais usadas no argumento init_string.
Palavra-chave | Propriedade OLE DB | Valores válidos e descrição |
---|---|---|
fonte de dados | DBPROP_INIT_DATASOURCE | Nome da fonte de dados à qual se conectar. Provedores diferentes interpretam isso de várias formas. Para o provedor OLE DB SQL Server Native Client, isso indica o nome do servidor. Para o provedor OLE DB Jet, indica o caminho completo do arquivo .mdb ou .xls. |
Local | DBPROP_INIT_LOCATION | Local do banco de dados ao qual se conectar. |
Propriedades estendidas | DBPROP_INIT_PROVIDERSTRING | A cadeia de conexão específica do provedor. |
Tempo limite de conexão | DBPROP_INIT_TIMEOUT | Valor de tempo limite após o qual a tentativa de conexão falha. |
Id de Usuário | DBPROP_AUTH_USERID | ID de usuário a ser usada para a conexão. |
Senha | DBPROP_AUTH_PASSWORD | Senha a ser usada para a conexão. |
Catálogo | DBPROP_INIT_CATALOG | O nome do catálogo inicial ou padrão durante a conexão à fonte de dados. |
Segurança Integrada | DBPROP_AUTH_INTEGRATED | SSPI, para especificar a Autenticação do Windows |
Comentários
OPENROWSET
sempre herda o agrupamento da instância, independentemente do conjunto de agrupamentos para colunas.
OPENDATASOURCE
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.
A função OPENDATASOURCE
pode ser usada nos mesmos locais da sintaxe Transact-SQL que um nome do servidor vinculado. Portanto, OPENDATASOURCE
pode ser usada como a primeira parte de um nome de quatro partes que faz referência a um nome de tabela ou exibição em uma instrução SELECT, INSERT, UPDATE ou DELETE, ou a um procedimento armazenado remoto em uma instrução EXECUTE. Ao executar procedimentos armazenados remotos, OPENDATASOURCE
deve fazer referência a outra instância do SQL Server. OPENDATASOURCE não aceita variáveis para seus argumentos.
Assim como a função OPENROWSET
, OPENDATASOURCE
deve referenciar apenas fontes de dados OLE DB que são acessadas com pouca frequência. Defina um servidor vinculado para qualquer fonte de dados acessada muitas vezes. Nem OPENDATASOURCE nem OPENROWSET fornecem todas as funcionalidades de definições de servidor vinculado, como gerenciamento de segurança e capacidade de consultar informações do catálogo. Todas as informações de conexão, inclusive senhas, devem ser fornecidas sempre que OPENDATASOURCE é chamada.
Importante
A Autenticação do Windows é muito mais segura do que a Autenticação do SQL Server. Sempre que possível, você deve usar a Autenticação do Windows. OPENDATASOURCE
não deve ser usada com senhas explícitas na cadeia de conexão.
Os requisitos de conexão de cada provedor são semelhantes aos requisitos desses parâmetros durante a criação de servidores vinculados. Os detalhes dos muitos provedores comuns estão listados no artigo sp_addlinkedserver (Transact-SQL).
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.
Permissões
Qualquer usuário pode executar OPENDATASOURCE. As permissões usadas para estabelecer conexão com o servidor remoto são determinadas na cadeia de conexão.
Exemplos
a. Usar OPENDATASOURCE com SELECT e o Driver do OLE DB para SQL Server
O exemplo a seguir usa o Driver do Microsoft OLE DB para SQL Server Native Client para acessar a tabela HumanResources.Department
do banco de dados AdventureWorks2022
no servidor remoto Seattle1
.
Uma instrução SELECT
é 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 Driver do OLE DB SQL Server.
SELECT GroupName, Name, DepartmentID
FROM OPENDATASOURCE('MSOLEDBSQL', 'Server=Seattle1;Database=AdventureWorks2022;TrustServerCertificate=Yes;Trusted_Connection=Yes;').HumanResources.Department
ORDER BY GroupName, Name;
B. Usar OPENDATASOURCE com SELECT e o Provedor do OLE DB para SQL Server
O exemplo a seguir cria uma conexão com a instância Payroll
do SQL Server no servidor London
e consulta AdventureWorks2022.HumanResources.Employee
.
Observação
Usar SQLNCLI redirecionará o SQL Server para a última versão do provedor OLE DB do SQL Server Native Client. Espera-se que o provedor OLE DB seja registrado com o PROGID especificado fornecido no Registro.
Importante
O SQL Server Native Client OLE DB (SQLNCLI) permanece preterido e não é recomendável usá-lo para um novo trabalho de desenvolvimento. Em vez disso, use o novo Driver do Microsoft OLE DB para SQL Server (MSOLEDBSQL), que será atualizado com os recursos de servidor mais recentes.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=London\Payroll;Integrated Security=SSPI')
.AdventureWorks2022.HumanResources.Employee;
C. Usando o Microsoft OLE DB Provider for Jet
O exemplo a seguir cria uma conexão ad hoc com uma planilha do Excel no formato 1997 - 2003.
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\DataFolder\Documents\TestExcel.xls;Extended Properties=EXCEL 5.0')...[Sheet1$] ;